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

标签 c++ visual-c++ getline

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

getline(file, line);

'文件'在这里声明:

ifstream File;
File.open("fruit.txt");

这里声明了“line”:

int line = 0;

Getline 带有红色下划线并带有此消息:

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

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

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

我做错了什么?

编辑:

完整代码如下:

ifstream fruitFile;
fruitFile.open("fruit.txt");
int line = 0;
int C_FRUIT = getline(fruitFile, line);
fruitFile.close();

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

最佳答案

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

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

但要注意:std::getline()的返回值不是 int !这是一个流引用。这就是为什么您会收到第二个编译器错误的原因。

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

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

或者如果你真的想在整行中读取一个 int:

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

关于C++ Getline 问题(没有重载函数的实例 "getline",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40228108/

相关文章:

c++ - 重载比较运算符不工作

c++ - 使用 std::streams 格式化输出

c++ - c++ 中有没有办法不为项目的特定部分生成调试信息?

c++ - std::getline 在最后一次出现定界符后跳过来自 std::cin 的输入,但不使用来自 std::istringstream 的输入

c++ - 取消引用 nullptr 时编译器不会发出警告

C++ CRTP派生类对象切片

c++ - 如何找到 VC++ v10 中的新增功能?

c++ - 改变产地? Win32?

c++ - 有没有办法在遇到 `\n` 时停止 std::cin

C++ std::getline 错误