std没有会员'getline'?

时间:2011-04-25 17:33:32

标签: c++ io std getline

我正在尝试使用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);
        }
    }
}

3 个答案:

答案 0 :(得分:25)

std::getlinestring标题中定义。

#include <string>

此外,您的代码未使用cstringcstdiocmathcstdlib中的任何内容;为什么要包括这些呢?

编辑:为了澄清有关cstringstring标题的混淆,cstring提取 C运行时库的内容 string.h进入std命名空间; string C ++标准库的一部分,包含getlinestd::basic_string<>(及其特化std::stringstd::wstring)等 - 两个非常不同的标题。

答案 1 :(得分:3)

正如ildjarn指出的那样,该函数在<string>中声明,我很惊讶您没有收到错误:

string line;

另外,这个:

 while(ifile.good()){
      getline(ifile,line);
 }

不是编写读循环的方法。您必须测试读取操作的成功,而不是当前流状态。你想要:

while( getline(ifile,line) ) {
}

答案 2 :(得分:0)

之所以会这样,是因为getline来自字符串库,您需要#include <string>#include <cstring>