web-dev-qa-db-ja.com

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);
        }
    }
}
16
pighead10

std::getlinestringヘッダーで定義されています。

#include <string>

また、コードはcstringcstdiocmath、またはcstdlibのいずれも使用していません。なぜこれらを含めるのが面倒なのですか?

EDIT:cstringヘッダーとstringヘッダーに関する混乱を明確にするために、cstringはコンテンツをプルしますCランタイムライブラリのstring.hstd名前空間に追加します。 stringC++標準ライブラリの一部であり、getlinestd::basic_string<>(およびその特殊化std::stringおよびstd::wstring)など-2つの非常に異なるヘッダー。

32
ildjarn

Ildjarnが指摘しているように、この関数は<string>で宣言されており、次の場所でエラーが発生しなかったことに驚いています。

string line;

また、これ:

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

読み取りループを作成する方法ではありません。現在のストリーム状態ではなく、読み取り操作の成功をテストする必要があります。あなたが欲しい:

while( getline(ifile,line) ) {
}
3
user2100815