C++ Getline 问题(没有重载函数“getline”的实例

owe*_*eet 3 c++ getline visual-c++

我知道我知道。 这个问题以前曾被问过,但我查看了所有答案,似乎没有一个能解决我的问题。当我使用 getline 函数获取文件中某一行的内容时,它不起作用。

getline(file, line);
Run Code Online (Sandbox Code Playgroud)

“文件”在这里声明:

ifstream File;
File.open("fruit.txt");
Run Code Online (Sandbox Code Playgroud)

并且“line”在这里声明:

int line = 0;
Run Code Online (Sandbox Code Playgroud)

Getline 带有红色下划线并显示以下消息:

getline
no instance of overloaded function "getline" matches the argument list
argument types are :(std::ifstream, int)
Run Code Online (Sandbox Code Playgroud)

这意味着 getline 的实例没有文件流的参数列表和整数。

这是没有意义的,因为关于此事的所有其他问题都明确指出,参数文件流和整数。

我究竟做错了什么?

编辑:

这是完整的代码:

ifstream fruitFile;
fruitFile.open("fruit.txt");
int line = 0;
int C_FRUIT = getline(fruitFile, line);
fruitFile.close();
Run Code Online (Sandbox Code Playgroud)

第一行应该是一个数字,我需要它。

Chr*_*phe 9

getline()将读取一行文本。它不能直接读取 int。这就是您收到错误消息的原因。

你必须知道有两个getline()。有一个是istream::getline()std::getline()。两者都有不同的签名。第一个是流的成员函数,在流头中定义;后者在<string>标头中定义。

但要注意: 的返回值std::getline()不是 an int!这是一个流参考。这就是您收到第二个编译器错误的原因。

最后,如果你想读取整数 x,使用提取器会更容易:

int value; 
fruitFile >> value; 
fruitFile.ignore(SIZE_MAX, '\n');   // in case you'd need to go to next line
Run Code Online (Sandbox Code Playgroud)

或者,如果您确实想读取整行的 int:

string line;
getline(fruitFile, line); 
stringstream sst(line);     // creates a string stream: a stream that takes line as input
sst >> value;      
Run Code Online (Sandbox Code Playgroud)

  • 啊哈!谢谢你,这很完美,人们没有充分解释我的问题,无法解决和理解我的问题。&lt;3 (2认同)