Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++类方法更改成员变量,但不在主变量中_C++_Pass By Reference - Fatal编程技术网

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

C++类方法更改成员变量,但不在主变量中,c++,pass-by-reference,C++,Pass By Reference,我有一个学生班,里面有学生的名字和注册号。Student类的私有成员之一是一个map,它存储学生的模块代码字符串以及模块浮点标记 该类有一个“addMark”函数,该函数接受模块代码和该模块的标记。如果模块已存在于地图中,则标记将被覆盖。否则,它将插入到地图中 void Student::addMark(const string &module, float mark) { map<string, float>::iterator iter = marks.find(

我有一个学生班,里面有学生的名字和注册号。Student类的私有成员之一是一个map,它存储学生的模块代码字符串以及模块浮点标记

该类有一个“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});}
}
无论如何,在读取一行并存储每个令牌之后,需要为正确的学生存储模块标记,因此我使用for循环遍历所有学生,查看他们的注册号是否匹配。如果有,则添加标记:

for (Student st: studVect)
{
    if (st.getRegNo() == markLine.at(0))
    {
        st.addMark(markLine.at(1), markLine.at(2));
    }
}
但当我事后检查学生的分数是否有变化时,他们没有。
我在谷歌上搜索了很多,发现了一些与我的问题非常相似的问题,我有一种感觉,这与参考文献和正在创建的标记副本有关。然而,我并不确定我到底需要在哪里使用参考资料。如果有人能给我指出正确的方向,我将不胜感激。

您正在处理学生记录的副本

改变

for (Student st: studVect)


对于Student st:studVect在迭代时创建每个学生的副本。换成学生&st:studVectOh天哪,我有一种感觉,这是如此明显。非常感谢。另外,在addMark中,为什么要对标记使用迭代器,而不仅仅是设置它?标记[模块]=标记;
for (Student st: studVect)
for (Student &st: studVect)