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);
}
}
}
std::getline
はstring
ヘッダーで定義されています。
#include <string>
また、コードはcstring
、cstdio
、cmath
、またはcstdlib
のいずれも使用していません。なぜこれらを含めるのが面倒なのですか?
EDIT:cstring
ヘッダーとstring
ヘッダーに関する混乱を明確にするために、cstring
はコンテンツをプルしますCランタイムライブラリのstring.h
をstd
名前空間に追加します。 string
はC++標準ライブラリの一部であり、getline
、std::basic_string<>
(およびその特殊化std::string
およびstd::wstring
)など-2つの非常に異なるヘッダー。
Ildjarnが指摘しているように、この関数は<string>
で宣言されており、次の場所でエラーが発生しなかったことに驚いています。
string line;
また、これ:
while(ifile.good()){
getline(ifile,line);
}
読み取りループを作成する方法ではありません。現在のストリーム状態ではなく、読み取り操作の成功をテストする必要があります。あなたが欲しい:
while( getline(ifile,line) ) {
}