всегда загружает дополнительную строку
Конечно: вы вставляете прочитанное без проверки того, что было прочитано успешно.
Вам необходимо переместить file.good()
тест после попытки чтения.
Кроме того, нет необходимости явно проверять good
, результат getline
уже дает вам статус. Канонический способ загрузки простых данных из файла внутри цикла заключается в следующем:
student_type student;
while (getline(file, student.name) and getline(file, student.phone))
current->insert(student_type(student)); // Makes explicit copy!