我是C ++的新手所以请原谅noob问题。在我的程序中,我通过引用将一个“Employee”对象的向量传递给一个函数,该函数在向量中的每个对象上调用一个Employee成员函数,将“salary”提高“r”%(在这种情况下为2%)。我已经通过记录调用验证了这种情况(薪水在函数中发生了变化),但更改不会持续...当我再次打印Employee对象时,工资不变。感谢任何帮助!
// main.cpp
void raiseAllBy2Percent(vector<Employee> &v)
{
for (int i = 0; i < v.size(); i++)
{
Employee e = v[i];
e.salaryRaise(2);
}
}
// Employee.cpp
void Employee::salaryRaise(double r)
{
cout << "**salaryRaise called";
_salary += (r/100 * _salary);
cout << "**new salary: " << _salary; // This logs with the change as expected
}
答案 0 :(得分:12)
您正在通过引用传递向量,但是在此行:
Employee e = v[i];
您正在复制员工对象。也可以作为参考:
Employee &e = v[i];
它将按预期运行。
(请注意,这只能起作用,因为std::vector::operator[]
本身会返回引用,就像大多数标准容器的下标运算符一样。)
答案 1 :(得分:3)
您没有更改矢量内容。而是将其分配给另一个新的Employee
对象e
并修改:
Employee e = v[i];
e.salaryRaise(2);
将其更改为:
v[i].salaryRaise(2);
这将修改向量中的元素。
答案 2 :(得分:1)
您正在复制矢量中的元素:
Employee e = v[i]; // e is a copy of v[i]
你可能意味着
v[i].salaryRaise(2);