C++ - Class 方法更改成员变量,但不在 main 中

C++ - Class method changes member variable, but not in main

我有一个学生 class,它存储了学生的姓名和注册号。 Student class 的私有成员之一是一个映射,它存储学生的模块代码(字符串)以及模块的标记(float)。

class 有一个 'addMark' 函数,它接受模块代码和该模块的标记。如果该模块已存在于映射中,则标记将被覆盖。否则,它被插入到地图中。

void Student::addMark(const string &module, float mark)
{
    map<string, float>::iterator iter = marks.find(module);
    if (iter != marks.end()){marks[module] = mark;}
    else{marks.insert({module, mark});}
}

我已经检查过了,这似乎在那个函数中有效。

在 main 函数中,我有一个向量 markLine,它将一行的每个标记存储在包含标记的文本文件中。第一个令牌(markLine.at(0))是注册号,第二个令牌是模块代码,第三个令牌是标记。因此向量可能看起来像下面一行:

markLine = {10105, "CE101", 78.5};

无论如何,在读取一行并存储每个令牌后,需要为正确的学生存储模块标记,所以我使用 for 循环遍历所有学生,看看他们的注册号是否匹配。如果是,则添加标记:

for (Student st: studVect)
{
    if (st.getRegNo() == markLine.at(0))
    {
        st.addMark(markLine.at(1), markLine.at(2));
    }
}

但是当我事后检查学生的分数是否发生变化时,他们没有。

我在谷歌上搜索了很多,发现了一些与我的问题非常相似的问题,我觉得这与参考文献有关,并且正在创建标记的副本。但是,我不太确定 哪里 我需要使用参考。如果有人能指出正确的方向,我将不胜感激。

您正在使用学生记录的副本。

改变

for (Student st: studVect)

for (Student &st: studVect)