Другие уже указали детали проблемы, которую вы заметили.
Однако вы должны понимать, что есть еще проблемы, которые вы еще не заметили.Одним из них является довольно очевидная утечка памяти.Каждая итерация цикла выполняется: Student * temp = new Student();
, но вы никогда не выполняете соответствующий delete
.
C ++, что делает управление памятью намного проще, чем некоторые другие языки (например, Java), для которых требуется new
каждый объект, который вы используете.В C ++ вы можете просто определить объект и использовать его:
Student temp;
temp.input(studentFile);
Это упрощает код и устраняет утечку памяти - ваш Student
объект будет автоматически уничтожен в конце каждой итерации, и(концептуально) новый / другой, созданный в начале следующей итерации.
Хотя на самом деле это не ошибка как таковая , даже это все еще может быть несколько упрощено.Поскольку все, на что указывает sdb
, по-видимому, имеет функцию-член insert
, вы можете использовать ее как стандартный контейнер (который может на самом деле быть , хотя в любом случае это не имеет значения).Чтобы оптимизировать код, начните с написания оператора извлечения для Student
:
std::istream &operator>>(std::istream &is, Student &s) {
s.input(is);
return is;
}
Затем вы можете просто скопировать данные из потока в коллекцию:
std::copy(std::istream_iterator<Student>(studentFile),
std::istream_iterator<Student>(),
std::inserter(*sdf));
Примечание.что это автоматизирует правильную обработку EOF, поэтому вам не нужно иметь дело с проблемами, с которыми вы начинали вообще (даже если вы хотели вызвать их, это было бы непросто).