11

我是 C++ 新手,所以请原谅菜鸟问题。在我的程序中,我通过引用将“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
}
4

3 回答 3

16

您通过引用传递向量,但在这一行:

Employee e = v[i];

您正在复制员工对象。也将其作为参考:

Employee &e = v[i];

它将按预期运行。

(请注意,这只有效,因为std::vector::operator[]它本身返回一个引用,就像大多数标准容器的下标运算符一样。)

于 2013-10-26T15:40:37.567 回答
4

您没有更改矢量内容。相反,您将其分配给另一个新Employee对象,e并对其进行修改:

Employee e = v[i];
e.salaryRaise(2);

将其更改为:

v[i].salaryRaise(2);

这将修改向量中的元素。

于 2013-10-26T15:39:32.300 回答
2

您正在此处复制向量中的元素:

Employee e = v[i]; // e is a copy of v[i]

你大概是说

v[i].salaryRaise(2);
于 2013-10-26T15:39:59.363 回答