C ++ - 类方法更改成员变量,但不在主

时间:2018-01-13 19:35:32

标签: c++ pass-by-reference

我有一个学生课程,存储学生的姓名和注册号码。 Student类的私人成员之一是存储学生模块代码(字符串)的地图,以及模块的标记(浮动)。

该课程有一个' 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));
    }
}

但是当我事后检查一下学生的分数是否已经改变时,他们却没有。

我已经搜索了很多东西,发现了一些与我的问题非常相似的问题,我觉得这与引用有关,并且创建了一个标记副本。但是,我并不确定 我需要使用引用。如果有人能指出我正确的方向,我将不胜感激。

1 个答案:

答案 0 :(得分:1)

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

更改

for (Student st: studVect)

for (Student &st: studVect)