2014-04-17 4 views
0

Я пытаюсь написать функцию getline, которая будет принимать строку из открытого потока ... Я просмотрел разные веб-сайты и попробовал, что он говорит, но я получаю тонны странные ошибки. Мне нужна getline, чтобы взять все слова в разделе «содержание» моего файла. Это то, что я пробовал, но я получаю ошибки с этим.Getline in class C++

// Fill a single Tweet from a stream (open file) 
// Returns true if able to read a tweet; false if end of file is encountered 
// Assumes that each line in the file is correct (no partial tweets) 
bool Tweet::FillTweet(ifstream &Din) 
{ 
    string tmp; 

    bool Success = false; 
    Din >> tmp; 
    if (!Din.eof()) 
    { 
     Success = true; 
     date = tmp; 
     Din >> hashtag >> getline(Din,contents); 
    } 
    else 
     cout << "I don't want to read your tweet anyway. " << endl; 

ответ

1

Это неправильный способ использования getline(). Изменение:

Din >> hashtag; 
getline(Din,contents); 

Почему? getline() возвращает ссылку на istream. Там нет перегружен >> оператор, который принимает два istream s

+0

Большое вам спасибо! – savannaalexis

1

Это

Din >> hashtag >> getline(Din,contents); 

должно быть:

Din >> hashtag; 
    getline(Din, contents); 

Я хотел бы также сделать

if (Din >> tmp) 

вместо if (!Din.eof)

+0

Можете ли вы объяснить, почему вы изменили бы, если (! Din.eof)? – savannaalexis

+0

Потому что вы избегаете дополнительной проверки - и вы не получите бесконечный цикл, если 'date' не может быть прочитан, но это не EOF. (Хотя это маловероятно со строкой, конечно) –

+1

[Из-за этого] (http://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-considered-wrong). Проверка вашей io вместо того, чтобы предполагать, что они правильные, всегда * хорошая идея. – WhozCraig