没有重载函数的实例 "getline" 匹配参数列表——参数类型是:(std::ifstream,char)
no instance of overloaded function "getline" matches the argument list -- argument types are: (std::ifstream,char)
这里是 c++ 初学者
我试图从文件中获取行并将其放入字符串数组中。该文件的每个单词都在其自己的行中。每当我测试数组时,它似乎正在将每个字母加载到数组中。所以它是字符而不是每个单词作为一个字符串。每个文件中的第一件事是一个数字,它将是数组的大小。我应该动态分配数组,我相信我做对了。
欢迎任何帮助。
我正在使用 VScode,getline 给我的问题是,没有重载函数的实例 "getline" 匹配参数列表——参数类型是:(std::ifstream,char).
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int showMenuGetChoice();
string createStringArray(int);
void getInfoFromUser(string, string, int);
void printStory(int, string, int);
// Calls all the other functions to make a working Madlibs game.
int main ()
{
int UserChoice;
ifstream QuestionFile;
int arraySize;
string Question;
int test = 0;
do {
cout <<"Let's Play some Madlibs!!" << endl << endl;
UserChoice=showMenuGetChoice();
if (UserChoice == 1)
{
ifstream QuestionFile;
QuestionFile.open("starWars.txt");
QuestionFile >> arraySize;
cin.ignore();
string QuestionArray=createStringArray(arraySize);
if(QuestionFile.is_open())
{
QuestionArray[arraySize];
for(int i=0; i < arraySize; i++)
{
getline(QuestionFile, QuestionArray[i]);
}
}
for(int i=0; i < arraySize; i++)
{
cout << QuestionArray[i] << endl;
}
}
// Takes in a integer and creates a array of that size. Dynamically allocates the array and returns a point to this array.
string createStringArray(int n)
{
string*QuestionArray = new string[n];
return *QuestionArray;
}
您遇到错误:
no instance of overloaded function "getline" matches the argument list
-- argument types are: (std::ifstream,char).
因为您的 "getline" 电话有问题:
getline(QuestionFile, QuestionArray[i]);
std::getline
接受两个参数,一个 std::istream
引用和一个 std::string
引用。 QuestionFile
是一个 istream
,所以没关系,但是如果您查看 QuestionArray
的声明:
string QuestionArray=createStringArray(arraySize);
您应该注意到 QuestionArray 是 string
类型的变量。我不认为这是你想要的。您应该始终谨慎选择您在 C++ 中声明的变量类型,否则您将违背编译器试图为您提供的类型安全。
字符串 QuestionArray
的第 i
个元素是 char
,而不是 string
。这是编译器错误的原因。您正在尝试将行放入单个字符元素而不是字符串中。
希望通过以上解释,提供的编译器消息现在会更有意义。它提供相同的信息,只是更简洁了一点。
有了这些知识,让我们解决 createStringArray
函数:
string createStringArray(int n)
{
string*QuestionArray = new string[n];
return *QuestionArray;
}
您将函数声明为 return 单个字符串,而我希望函数是 return 字符串序列。 return 字符串序列的正确方法是使用 std::vector<std::string>
,但如果您必须使用有风险的、过时的手动内存管理,则需要 return a 指向字符串的指针,而不是来自此函数的字符串。有了这些知识,您应该能够更正此函数、原始 QuestionArray
变量类型,并且编译器错误应该会消失。
这里是 c++ 初学者 我试图从文件中获取行并将其放入字符串数组中。该文件的每个单词都在其自己的行中。每当我测试数组时,它似乎正在将每个字母加载到数组中。所以它是字符而不是每个单词作为一个字符串。每个文件中的第一件事是一个数字,它将是数组的大小。我应该动态分配数组,我相信我做对了。 欢迎任何帮助。 我正在使用 VScode,getline 给我的问题是,没有重载函数的实例 "getline" 匹配参数列表——参数类型是:(std::ifstream,char).
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int showMenuGetChoice();
string createStringArray(int);
void getInfoFromUser(string, string, int);
void printStory(int, string, int);
// Calls all the other functions to make a working Madlibs game.
int main ()
{
int UserChoice;
ifstream QuestionFile;
int arraySize;
string Question;
int test = 0;
do {
cout <<"Let's Play some Madlibs!!" << endl << endl;
UserChoice=showMenuGetChoice();
if (UserChoice == 1)
{
ifstream QuestionFile;
QuestionFile.open("starWars.txt");
QuestionFile >> arraySize;
cin.ignore();
string QuestionArray=createStringArray(arraySize);
if(QuestionFile.is_open())
{
QuestionArray[arraySize];
for(int i=0; i < arraySize; i++)
{
getline(QuestionFile, QuestionArray[i]);
}
}
for(int i=0; i < arraySize; i++)
{
cout << QuestionArray[i] << endl;
}
}
// Takes in a integer and creates a array of that size. Dynamically allocates the array and returns a point to this array.
string createStringArray(int n)
{
string*QuestionArray = new string[n];
return *QuestionArray;
}
您遇到错误:
no instance of overloaded function "getline" matches the argument list -- argument types are: (std::ifstream,char).
因为您的 "getline" 电话有问题:
getline(QuestionFile, QuestionArray[i]);
std::getline
接受两个参数,一个 std::istream
引用和一个 std::string
引用。 QuestionFile
是一个 istream
,所以没关系,但是如果您查看 QuestionArray
的声明:
string QuestionArray=createStringArray(arraySize);
您应该注意到 QuestionArray 是 string
类型的变量。我不认为这是你想要的。您应该始终谨慎选择您在 C++ 中声明的变量类型,否则您将违背编译器试图为您提供的类型安全。
字符串 QuestionArray
的第 i
个元素是 char
,而不是 string
。这是编译器错误的原因。您正在尝试将行放入单个字符元素而不是字符串中。
希望通过以上解释,提供的编译器消息现在会更有意义。它提供相同的信息,只是更简洁了一点。
有了这些知识,让我们解决 createStringArray
函数:
string createStringArray(int n)
{
string*QuestionArray = new string[n];
return *QuestionArray;
}
您将函数声明为 return 单个字符串,而我希望函数是 return 字符串序列。 return 字符串序列的正确方法是使用 std::vector<std::string>
,但如果您必须使用有风险的、过时的手动内存管理,则需要 return a 指向字符串的指针,而不是来自此函数的字符串。有了这些知识,您应该能够更正此函数、原始 QuestionArray
变量类型,并且编译器错误应该会消失。