我正在试图弄清楚为什么现在已经破了,因为我有它工作,我不确定是什么问题。我正在尝试从已打开的文件中获取一个简单的getline,然而,编译器一直给我错误。我已经尝试过找到这些问题的其他人,但我还是找不到其他人。有什么建议吗?
void Foo::bar(ifstream &inputFile)
{
// Read in the data, parse it out, and
// call loadQueue
string input;
do {
getline(inputFile, input);
loadQueue(input);
}while (!(inputFile.eof()));
}
以下是我得到的回报:
g++ -c -o Airworthy.o Airworthy.cpp
Foo.cpp: In member function ‘void Airworthy::readData(std::ifstream&)’:
Foo.cpp:25:27: error: no matching function for call to ‘getline(std::ifstream&, std::string&)’
Foo.cpp:25:27: note: candidates are:
In file included from /usr/lib/gcc/x86_64-unknown-linux-gnu/4.7.2/../../../../include/c++/4.7.2/string:55:0,
from /usr/lib/gcc/x86_64-unknown-linux-gnu/4.7.2/../../../../include/c++/4.7.2/bits/locale_classes.h:42,
from /usr/lib/gcc/x86_64-unknown-linux-gnu/4.7.2/../../../../include/c++/4.7.2/bits/ios_base.h:43,
from /usr/lib/gcc/x86_64-unknown-linux-gnu/4.7.2/../../../../include/c++/4.7.2/ios:43,
from /usr/lib/gcc/x86_64-unknown-linux-gnu/4.7.2/../../../../include/c++/4.7.2/ostream:40,
from /usr/lib/gcc/x86_64-unknown-linux-gnu/4.7.2/../../../../include/c++/4.7.2/iostream:40,
关于问题的任何想法?
答案 0 :(得分:4)
您很可能忘记#include
所有必需的标准标题。一种可能性是:
#include <fstream>
或许你忘了:
#include <string>
您必须明确地#include
所有相关的标准标题,而不依赖于通过其他标题的间接包含。
答案 1 :(得分:1)
正如安迪所说,你需要适当的包括。有, 但是,您的代码至少还有两个主要问题(一个 其中会影响你需要的东西):
你永远不应该(或几乎从不)传递ifstream
作为
函数的参数。除非功能要做
open
或close
,您应该将其std::istream&
传递给istream
它可以使用任何ifstream
调用,而不仅仅是<istream>
。
更改此内容后,您需要添加<fstream>
和
不是<fstream>
。 (<istream>
包括! inputFile.eof()
。还有很多
更多你不需要的东西。)
你永远不应该在while ( std::getline( inputFile, input ) ) {4
// ...
}
上循环。它没有
工作。在你的情况下,循环应该是
do...while
它有效,几乎没有别的。
通常,input
循环几乎总是错误的
做输入;它会导致您处理输入,即使在
它失败了(你做了 - 在{之后}使用getline
getline
但在测试inputFile.eof()
是否成功之前
是一个错误)。而istream::eof()
的结果则不然
在输入失败之前确实很好地定义了。运用
控制循环的{{1}}几乎总是错误。