gpt4 book ai didi

c++ - 为什么我的对象 vector 中的元素在调用对象成员函数之一时没有更新?

转载 作者:行者123 更新时间:2023-11-28 04:31:54 25 4
gpt4 key购买 nike

很长一段时间以来,我一直在尝试使用 visual studio 调试器对此进行调试,但我无法弄清楚为什么我的函数 emp.setHoursWorked(hWorked);recordHoursWorkedForEmployee似乎只是更新 numOfHoursWorked而在 recordHoursWorkedForEmployee , 一旦程序退出函数 numOfHoursWorked vector 中的所有员工返回 0。下面是有问题的代码。任何帮助将不胜感激。

#ifndef PAYROLLSYSTEM   
#define PAYROLLSYSTEM
#include "Employee.h"
#include "Paycheck.h"
#include <string>
#include <vector>

using namespace std;

class PayRollSystem
{
public:

//custom constructor gets company name
PayRollSystem(string);
void createEmployee(string, string,string, double);
void removeEmployee(string);
void recordHoursWorkedForEmployee(string);
void issuePaychecks();


private:
string companyName;
vector<Employee> companyEmployees;
};
#endif



void PayRollSystem::createEmployee(string empId, string fName, string lName, double hWage)
{
Employee temEmp = Employee(empId, fName, lName, hWage);
companyEmployees.push_back(temEmp);

}


void PayRollSystem::recordHoursWorkedForEmployee(string empId)
{

for (Employee emp : companyEmployees)
{

if (emp.getEmployeeId() == empId)
{
int hWorked = 0;
cout << "What are the hours the worked for " + emp.getEmployeeId() + " during current pay period?" << endl;
cin >> hWorked;

//TODO: For some reason this line is not updating the hours worked. Must fix!
emp.setHoursWorked(hWorked);
cout << "Hours for " + emp.getEmployeeId() + " have been changed to " << emp.getHoursWorked() << endl;
}
}

}

我在这里排除头文件是为了不粘贴太多与我面临的问题无关的东西,只提供与所提供问题相关的成员函数的实现

//Overloaded constructor to be used with PayRollSystem
Employee::Employee(string empId, string fName, string lName, double hWage)
{
employeeId = empId;
firstName = fName;
lastName = lName;
hourlyWage = hWage;
numOfHoursWorked = 0;

}

void Employee::setHoursWorked(int hWorked)
{
if (hWorked >= 0)
numOfHoursWorked = hWorked;
else
{
cout << "Invalid number of hours worked." << endl;
exit(EXIT_FAILURE);
}
}

string Employee::getEmployeeId() const
{
return employeeId;
}

最佳答案

此行复制每个员工:

for (Employee emp : companyEmployees)

变量emp 是容器中对象的拷贝。因此,如果您更新它,您只是在更新拷贝。每次迭代您都会将一个新值复制到 emp 中,但任何更改都不会反射(reflect)在原始对象中。

你的意思可能是:

for (Employee& emp : companyEmployees)
^^^

这里的 emp 是对 vector 内部对象的引用。如果你修改它,你就是在修改 vector 中的原始值。

关于c++ - 为什么我的对象 vector 中的元素在调用对象成员函数之一时没有更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52657258/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com