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

时间:2012-11-15 16:53:29

标签: c++

我正在为我的系统编程课程做作业。 我必须实施大学模拟。 我有一个课程抽象类,以及ComputerScienceCourse的子类(以及一些其他不影响我要问的子类)。 我有一个学生抽象类,以及它的子类ComputerScienceStudent(和一些其他子类不影响我要问的内容)。 在ComputerScienceCourse子类中有一个函数:

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);

}

1 个答案:

答案 0 :(得分:1)

问题似乎是当学生课程失败时,矢量的内容会被修改。在迭代其内容时从向量中删除东西是很难的。看起来像一个更合适的数据模型,这里教师会删除失败的学生,这也会使这个问题更容易处理。所以教大家,然后再次浏览列表以删除失败的学生。