刚开始学习结构,我以为我理解它们是如何工作的,使用点运算符来访问对象的一个成员,但我显然没有,因为下面的 readEmployeeRecord 函数没有干活了。我该怎么做? (代码简短且自我解释)
非常感谢您花时间进一步向我解释结构!当然我先尝试谷歌,但我找不到一个按照我想要的方式输入数据的例子,并且不确定我应该怎么做。
#include <iostream>
#include <iomanip>
using namespace std;
//Employee type
struct Employee{
float wage;
char status;
char dept[4]; //for 3letter department, last position is \0 correct?
};
//function definitions
void readEmpoyeeRecord(Employee staff);
void printEmployeeRecord(Employee staff);
int main(){
Employee employeeA;
readEmpoyeeRecord(employeeA);
printEmployeeRecord(employeeA);
return 0;
}
void readEmpoyeeRecord(Employee employee){
cout << "Enter empolyees wage: ";
cin >> employee.wage;
cout << "Enter empolyees status (H or S): ";
cin >> employee.status;
cout << "Enter empolyees dept (ABC): ";
cin >> employee.dept;
}
void printEmployeeRecord(Employee staff){
cout << "Wage: Status: Department:" <<endl;
cout << fixed << setprecision( 2 ) << staff.wage;
}
答案 0 :(得分:9)
首先,尝试搜索谷歌“通过引用和值传递参数”。
您将了解到:
void readEmpoyeeRecord(Employee staff);
通过值将变量传递给函数,这意味着在函数内部创建并使用了对象的副本,因此原始对象不会被修改,而是复制。
要获得所需结果,请使用:
void readEmpoyeeRecord(Employee& staff);
通过引用传递意味着您传递完全相同的对象,而不是副本。
您的代码基本上会像这样工作:
//create new employee
Employee employeeA;
//call method readEmployeeRecord on a copy of employeeA
readEmpoyeeRecord(employeeA);
//call method printEmployeeRecord on a copy of employeeA
printEmployeeRecord(employeeA);
答案 1 :(得分:3)
readEmpoyeeRecord(Employee employee)
按值复制,而不是参考,因此您将丢失更改。
改为使用readEmpoyeeRecord(Employee& employee)
。
答案 2 :(得分:2)
您的问题是在C ++中,对象按值传递,直到您另行指定。因此,在readEmpoyeeRecord
的正文中,您处理的是employeeA
的副本,而不是employeeA
本身。
传递对readEmpoyeeRecord
功能的引用。 readEmpoyeeRecord
的签名应为:
void readEmpoyeeRecord(Employee &employee)