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

3

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

getline(file, line);

这里声明了'File':
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();

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

1
请引用您的来源。 - n. m.
2
请提供足够的代码以复制问题。另外,您能解释一下您希望这段代码做什么吗?老实说,我无法想象您认为这将会做什么。 - David Schwartz
1
你混淆了 std::getlinestd::ifstream::getline。而且,我很确定后者不是你想象中的那样工作。请查阅某些文档,详细了解这两个函数的定义和用法。(另外,不要使用 std::ifstream::getline。) - Baum mit Augen
我应该使用什么代替“Baum mit Augen”? - owenbradstreet
我仍然不知道你认为那段代码是做什么的。你认为这行代码应该放在哪里?你知道getline函数是干什么的吗?(提示:它获取一行文本。) - David Schwartz
3个回答

9

getline()函数可以读取一行文本,但不能直接读取整数,这就是你收到错误信息的原因。

你需要注意有两个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

如果你真的想要在一整行中读取一个整数:

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

2
啊哈!谢谢,这太完美了,人们之前没有充分解释让我理解和解决我的问题。<3 - owenbradstreet

4

@owenbradstreet,“This doesn't work”是什么意思?你是否包含了std::string - George
我正在使用命名空间std,第二个参数是一个字符串。它仍然会出现错误。 - owenbradstreet
@owenbradstreet -_- 请只发布您的编译错误,using namespace std;#include <string>不是同一件事情。 - George
std::basic_istream<char, std::chartraits<char>> &std::getline<char, std::char_traits<char>, std::allocator<char> > (std :: basic_istream<char, std::char_traits<char> > &_lstr, std::string &_Str) +4 overloads no suitable conversion function from "std::basic_istream<char, std::char_traits<char> > " to "int" exits - owenbradstreet
这个答案并没有解释为什么或者如何能够帮助提问者。而且提问者不愿意阅读文档也没有帮助到他。 - user4581301
1
根据我所看到的,OP已经是一个无药可救的情况了。 - Lightness Races in Orbit

0

我遇到了同样的错误。请将以下代码添加到您的代码中以解决问题

  1. 添加string
include <string>

在程序中加入以下函数调用,其中 string_variable 应该是 string 类型。
std::getline(cin, sting_variable)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接