c++ - 为什么我的对象向量中的元素在调用对象成员函数之一时没有更新?
问题描述
我一直在尝试使用 Visual Studio 调试器进行调试很长时间,但我无法弄清楚为什么我的函数emp.setHoursWorked(hWorked);
inrecordHoursWorkedForEmployee
似乎只numOfHoursWorked
在 in中更新recordHoursWorkedForEmployee
,一旦程序退出numOfHoursWorked
向量中所有员工的函数 go回到 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
,但任何更改都不会反映在原始对象中。
你可能的意思是:
for (Employee& emp : companyEmployees)
^^^
这emp
是对向量内对象的引用。如果您修改它,您将修改向量内的原始值。
推荐阅读
- iis - IIS 创建 (201) 响应压缩
- node.js - 我想用 nodemon 运行 babel 但收到错误代码:'MODULE_NOT_FOUND',
- javascript - 为什么在使用 styled-jsx 时没有应用这个关键帧动画?
- winapi - 如何通过 FindWindowW 从 unicode 窗口标题文本中查找窗口?
- c# - 在多对多关系中访问 EF Core 中最后一个表的属性
- angular - Angular - 如何在一个表单中上传两个单独的图像
- c# - 如何将属性从剃刀页面模型传递给 asp-route-id 标签助手
- c++ - 使用 C++ 发送原始帧
- flutter - 网页上的 Flutter 本地化,无需重新加载页面
- javascript - 尽管在 package.json 中传递了 --single 标志,但手动输入 URL 或刷新时,page.js 带有细长的“未找到请求的 URL”