我正在尝试使用std :: getline,但我的编译器告诉我没有识别出getline?
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <fstream>
#include <cstdlib>
int main(){
using namespace std;
string line;
ifstream ifile("test.in");
if(ifile.is_open()){
while(ifile.good()){
getline(ifile,line);
}
}
}
答案 0 :(得分:25)
std::getline
在string
标题中定义。
#include <string>
此外,您的代码未使用cstring
,cstdio
,cmath
或cstdlib
中的任何内容;为什么要包括这些呢?
编辑:为了澄清有关cstring
和string
标题的混淆,cstring
提取 C运行时库的内容 string.h
进入std
命名空间; string
是 C ++标准库的一部分,包含getline
,std::basic_string<>
(及其特化std::string
和std::wstring
)等 - 两个非常不同的标题。
答案 1 :(得分:3)
正如ildjarn指出的那样,该函数在<string>
中声明,我很惊讶您没有收到错误:
string line;
另外,这个:
while(ifile.good()){
getline(ifile,line);
}
不是编写读循环的方法。您必须测试读取操作的成功,而不是当前流状态。你想要:
while( getline(ifile,line) ) {
}
答案 2 :(得分:0)
之所以会这样,是因为getline来自字符串库,您需要#include <string>
或#include <cstring>