void keywords::load()
{
string t;
while(input)
{
getline(input,t);//error line
L.insert_ordered(t);
L++;
}
L.print(cout);
}
Вот ключевая строка:
while(input)
Это действительно означает:
while(!input.fail())
Посмотрите документацию ifstream :: fail () в http://www.cppreference.com/wiki/io/eof. Объясняется, как работают ifstream :: fail () (и eof ()).В вашем случае input.fail () следует проверять сразу после попытки чтения из файла, но перед попыткой использовать значение read.
Другими словами, вы должны проверить сразу после getline (..), но перед L.insert_ordered (...)
Попробуйте это -
void keywords::load()
{
string t;
while(true)
{
getline(input,t);
if (!input)
break;
L.insert_ordered(t);
L++;
}
L.print(cout);
}
Вотдругим способом вы можете сделать это:
void keywords::load()
{
string t;
getline(input,t);
while(input)
{
L.insert_ordered(t);
L++;
getline(input,t);
}
L.print(cout);
}
Я не пытался скомпилировать и запустить их, так что вы можете решить это самостоятельно, но я надеюсь, что вы поймете общую идею.Я не уверен, работает ли остальная часть вашей программы нормально или нет (я немного не уверен насчет цели L ++ в вашем коде), но я надеюсь, что объяснение о том, как использовать ifstream :: fail () (или неявный вызовэто путем тестирования потока напрямую) помогает.