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

Ответ 1

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

#include <string>

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

EDIT: Чтобы прояснить путаницу в заголовках cstring и string, cstring вытаскивает содержимое библиотеки времени выполнения string.h в пространство имен std; string является частью стандартной библиотеки С++ и содержит getline, std::basic_string<> (и его специализации std::string и std::wstring) и т.д. - два очень разных заголовка.

Ответ 2

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

string line;

Кроме того, это:

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

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

while( getline(ifile,line) ) {
}