Есть ряд проблем с этим кодом. Прежде всего, вы передаете векторы A
и ndgrades
по значению, поэтому после завершения функции read
вызывающая сторона не вернет результаты, как ожидалось. Вы должны передать по ссылке, чтобы ваша функция могла изменять исходные экземпляры в вызывающей программе, как показано ниже с &
в типе.
void read(vector <Student>& A, vector<int>& ndgrades)
{
//...
Во-вторых, вы должны просто позволить динамически расти вектору, а не чем попытаться предварительно выделить или вручную изменить размер. Для этого создайте экземпляр Student
, затем добавьте его в список следующим образом:
while (true) {
Student s;
fin >> s.name;
fin >> s.srname;
A.push_back(s);
В последней части неясно, чего пытается достичь часть кода. Если вы хотите сохранить список оценок для каждого учащегося, почему бы не иметь вектор внутри самого типа учащегося?
Кроме того, объявление fin
не отображается, но при условии, что это входной файл, вы может прекратить ваш l oop с:
if (!fin.good())
break;