循环函数调用未正确循环!(C++)

Looped function calling not looping correctly! (C++)

本文关键字:循环 C++ 函数调用      更新时间:2023-10-16

我正在为我的系统编程课程做家庭作业。我必须实现一个大学模拟。我有一个课程抽象课,还有计算机科学课程的儿童课(还有其他一些不影响我要问的问题的儿童课)。我有一个学生抽象课,还有它的儿童课ComputerScienceStudent(还有其他一些不影响我要问的问题的儿童课)。在计算机科学课程的儿童课堂上有一个功能:

void teach(){
for(i = all students that take this course [stored in a vector of pointers to Student objects, which is a member field of the CSCourse child class, called students]){
this->students.at(i)->study(*this);
}
}

此函数调用所有参加过此课程的学生的学习函数。该函数是子类CSStudent 的成员函数

void study(Course &c){
if(this->failedclass){
c.removeStudent(this)
}
}

现在,当我检查输出时,教学函数中的循环并没有为其中的所有学生调用学习函数。例如,如果我有4个学生在做这门课,有时它只会称前三个学生的学习函数,有时它会称第一个和最后一个学生的函数。。。变化。是什么原因导致for循环没有调用所有学生的学习函数?!以下是教学功能的完整代码:

for(unsigned int i=0; i<this->studentMembers.size(); i++){
this->studentMembers.at(i)->study(*this);
}

问题似乎是,当学生不及格时,向量的内容会被修改。在迭代向量的内容时,从向量中删除内容是很难做到的。这里似乎有一个更合适的数据模型,让讲师删除不及格的学生,这也会让这个问题变得更容易处理。所以,教每个人,然后再次浏览列表,删除不及格的学生。