C++类成员方法修改成员变量无效,主函数中未生效求助
问题根源与解决方案
嘿,你完全猜中了问题的核心——就是值拷贝 vs 引用的锅!
为什么修改无效?
你当前的循环代码:
for (Student st: studVect) { if (st.getRegNo() == markLine.at(0)) { st.addMark(markLine.at(1), markLine.at(2)); } }
这里的Student st是值传递,每次循环都会从studVect里复制一个新的Student对象到临时变量st中。你调用st.addMark()修改的只是这个临时副本,循环结束后副本就会被销毁,原studVect里的Student对象根本不会受到任何影响。
怎么修改?
只需要把循环变量改成引用类型,让st直接指向studVect中的原对象,这样所有修改都会直接作用到真实的Student实例上:
for (Student &st: studVect) { if (st.getRegNo() == markLine.at(0)) { // 注意:markLine.at(2)是字符串,需要转成float类型 st.addMark(markLine.at(1), stof(markLine.at(2))); } }
额外提醒:你代码里markLine.at(2)是字符串类型,直接传给addMark的float参数会编译失败,记得用stof()函数把字符串转换为float类型。
补充说明
如果以后你只需要遍历读取对象、不需要修改,可以用const Student &st来避免不必要的拷贝,提升程序性能:
for (const Student &st: studVect) { // 只读操作,比如打印学生信息 cout << st.getRegNo() << endl; }
内容的提问来源于stack exchange,提问作者electricbl00
相关产品推荐
相关产品推荐

