STD не имеет члена 'getline'? - PullRequest
       46

STD не имеет члена 'getline'?

13 голосов
/ 25 апреля 2011

Я пытаюсь использовать 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);
        }
    }
}

Ответы [ 2 ]

26 голосов
/ 25 апреля 2011

std::getline определено в заголовке string.

#include <string>

Кроме того, ваш код не использует ничего из cstring, cstdio, cmath или cstdlib; зачем их включать?

РЕДАКТИРОВАТЬ: Чтобы прояснить путаницу в отношении заголовков cstring и string, cstring перетаскивает содержимое string.h библиотеки времени выполнения C в std пространство имен; string является частью C ++ стандартной библиотеки и содержит getline, std::basic_string<> (и его специализации std::string и std::wstring) и т. Д. - два очень разные заголовки.

3 голосов
/ 25 апреля 2011

Как указывает ildjarn, функция объявлена ​​в <string>, и я удивлен, что вы не получили ошибку по адресу:

string line;

Также это:

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

- это не способ написать цикл чтения. Вы ДОЛЖНЫ проверить успешность операции чтения, а не текущее состояние потока. Вы хотите:

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