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