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

时间:2016-10-24 21:51:22

标签: 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();

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

2 个答案:

答案 0 :(得分:4)

getline的第二个参数必须是一个字符串:http://www.cplusplus.com/reference/string/string/getline/

我认为你想要达到的目标是:

ifstream fruitFile;
fruitFile.open("fruit.txt");
int line = 0;
fruitFile >> line
fruitFile.close();

答案 1 :(得分:3)

getline()会读取一行文字。它无法直接读取int。这就是您收到错误消息的原因。

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

但请注意: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;