我有一个为类项目创建记录管理系统的任务。添加记录时,我想首先读入一个向量,然后我的记录文件的内容当前对文件执行添加,最后输出回记录文件。但是,我很难理解如何构建它。我目前正在使用动态数组来存储数据但是当我尝试将它放入向量时我不会让我,因为它是一个指针。我觉得我接近这个完全错误,可以使用一些帮助。这是我的输入功能:
void student::input(istream& inF, student* stud, vector<student>& vect, int size)
{
//local variables
string first, middle, last, addressNum, addressStreet,
phone, gender, email, emContactFirst, emContactLast;
int ID, age;
string ph, emPhone;
while (inF)
{
for (int index = 0; index < size; index++){
inF >> first >> last >> middle;
stud->setName(first, last, middle);
inF >> ID;
stud->setId(ID);
inF >> age;
stud->setAge(age);
inF >> phone;
stud->setPhone(phone);
inF >> addressNum >> addressStreet;
stud->setAddress(addressNum, addressStreet);
inF >> gender;
stud->setGender(gender);
inF >> email;
stud->setEmail(email);
inF >> emPhone;
stud->setEmPhone(emPhone);
inF >> emContactFirst >> emContactLast;
stud->setEmContact(emContactFirst, emContactLast);
inF >> stud->gpa >> stud->hobbies >> stud->major
>> stud->probation;
if (inF.eof())
break;
else
stud++;
vect.push_back(stud);
}
}
}
答案 0 :(得分:2)
我看到的问题:
您正在使用=INDEX(Sheet3!A:A,MATCH(A4,Sheet3!B:B,0))
打破循环。请参阅Why is iostream::eof inside a loop condition considered wrong?。
您正在使用一个指针while (inF)
来读取所有值并在stud
中多次存储相同的指针。首先,编译器应该产生错误。您无法添加指向对象矢量的指针。
不清楚为什么函数需要vect
作为参数。您可以在函数中轻松使用本地对象。像这样:
stud
最好检查对for (int index = 0; index < size; index++){
student stud;
if ( !(inF >> first >> last >> middle) )
{
// Deal with error.
}
stud.setName(first, last, middle);
...
}
的调用是否成功分配了任何内容,而不是假设它成功了。而不是:
inF >> ...
使用
inF >> first >> last >> middle;
我建议更改所有此类电话。