标准没有成员'getline'?

Posted

技术标签:

【中文标题】标准没有成员\'getline\'?【英文标题】:std has no member 'getline'?标准没有成员'getline'? 【发布时间】:2011-08-12 11:23:01 【问题描述】:

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

【问题讨论】:

【参考方案1】:

std::getlinestring 标头中定义。

#include <string>

另外,您的代码没有使用来自cstringcstdiocmathcstdlib 的任何内容;为什么要包括这些?

编辑:为了澄清关于 cstringstring 标头的混淆,cstringC 运行时库的 string.h 的内容拉入std 命名空间; stringC++ 标准库 的一部分,包含getlinestd::basic_string&lt;&gt;(及其特化std::stringstd::wstring)等——两个非常 em> 不同的标题。

【讨论】:

我以为cstring和string是一样的,但是cstring是c++的? @Pig Head: cstring 用于 C-in-C++。它在std 命名空间中定义了所有旧的 C 字符串函数(strlen 等)。 哦,好的。我认为这是因为许多其他标题使用 `cx 那些cwhatever 标准头文件几乎总是一样的:将旧的C 头文件导入std 命名空间。它与 C++ 没有太大关系,只是因为它增加了 C 兼容性并减少了命名空间污染。 @Pig Head - 讨论了三种不同的标头:&lt;string&gt;&lt;string.h&gt;&lt;cstring&gt;&lt;cstring&gt;&lt;string.h&gt; 或多或少相同。 &lt;string&gt;&lt;string.h&gt; 大不相同,所以 &lt;cstring&gt;&lt;string&gt; 也大不相同。【参考方案2】:

正如 ildjarn 指出的那样,该函数在 &lt;string&gt; 中声明,我很惊讶您在以下位置没有收到错误:

string line;

还有,这个:

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

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

while( getline(ifile,line) ) 

【讨论】:

这是旧的,我知道,但我想我只是插话并声明上面的读取循环方法违反了“条件赋值”的编程基本规则,这将引发错误如果使用严格的标准。 while ((getline(ifile, line) !== false) . . . 会更好 我做了#include 并且可以声明字符串,但无法识别getline。我更改为 #Include 以使 getline 也可以正常工作。【参考方案3】:

这是因为getline来自字符串库,你需要#include &lt;string&gt;#include &lt;cstring&gt;

【讨论】:

以上是关于标准没有成员'getline'?的主要内容,如果未能解决你的问题,请参考以下文章

为啥使用 getline 从标准输入获取大量输入会截断我的输入?

getline() 带有文件描述符而不是文件指针

get()与getline()

c ++ 11 getline询问两次输入

字符串相关函数

3.C++逐行读取txt文件数据,利用getline -zobol的windows编程教程