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)
我有一个学生 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)