标准没有成员'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::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
)等——两个非常 em> 不同的标题。
【讨论】:
我以为cstring和string是一样的,但是cstring是c++的? @Pig Head:cstring
用于 C-in-C++。它在std
命名空间中定义了所有旧的 C 字符串函数(strlen
等)。
哦,好的。我认为这是因为许多其他标题使用 `cx
那些cwhatever
标准头文件几乎总是一样的:将旧的C 头文件导入std
命名空间。它与 C++ 没有太大关系,只是因为它增加了 C 兼容性并减少了命名空间污染。
@Pig Head - 讨论了三种不同的标头:<string>
、<string.h>
和 <cstring>
。 <cstring>
和 <string.h>
或多或少相同。 <string>
和 <string.h>
大不相同,所以 <cstring>
和 <string>
也大不相同。【参考方案2】:
正如 ildjarn 指出的那样,该函数在 <string>
中声明,我很惊讶您在以下位置没有收到错误:
string line;
还有,这个:
while(ifile.good())
getline(ifile,line);
不是编写读取循环的方法。您必须测试读取操作是否成功,而不是当前流状态。你想要:
while( getline(ifile,line) )
【讨论】:
这是旧的,我知道,但我想我只是插话并声明上面的读取循环方法违反了“条件赋值”的编程基本规则,这将引发错误如果使用严格的标准。 while ((getline(ifile, line) !== false) . . . 会更好 我做了#include这是因为getline来自字符串库,你需要#include <string>
或#include <cstring>
【讨论】:
以上是关于标准没有成员'getline'?的主要内容,如果未能解决你的问题,请参考以下文章