11

私はC++が初めてなので、noobの質問を許してください。私のプログラムでは、「従業員」オブジェクトのベクトルを参照によって関数に渡します。この関数は、ベクトル内の各オブジェクトで Employee メンバー関数を呼び出し、「給与」を「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

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 に答える