C++ 如何更改结构对象的成员值?(C+;+;结构初学者)

C++ 如何更改结构对象的成员值?(C+;+;结构初学者),c++,class,struct,iostream,C++,Class,Struct,Iostream,刚开始学习structs,我想我了解了它们的工作原理,使用点运算符访问对象的成员,但我显然不了解,因为下面的readEmployeeRecord函数根本不起作用。我应该怎么做?(代码简短且自我解释) 非常感谢您花时间向我进一步解释structs!当然,我首先尝试了谷歌,但我找不到一个完全按照我想要的方式输入数据的例子,也不确定我应该怎么做 #include <iostream> #include <iomanip> using namespace std; //Emp

刚开始学习structs,我想我了解了它们的工作原理,使用点运算符访问对象的成员,但我显然不了解,因为下面的readEmployeeRecord函数根本不起作用。我应该怎么做?(代码简短且自我解释)

非常感谢您花时间向我进一步解释structs!当然,我首先尝试了谷歌,但我找不到一个完全按照我想要的方式输入数据的例子,也不确定我应该怎么做

#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;
}
#包括
#包括
使用名称空间std;
//员工类型
结构雇员{
浮动工资;
字符状态;
char dept[4];//对于3letter depart,最后一个位置是否\0正确?
};
//函数定义
作废readEmpoyeeRecord(员工);
作废打印员工记录(员工);
int main(){
雇员a;
ReadEmpoyeRecord(员工档案);
打印员工档案(员工档案);
返回0;
}
作废ReadEmpoyeRecord(员工){
cout>员工工资;
cout>employee.status;
cout>employee.dept;
}
作废打印员工记录(员工){

cout首先,尝试在谷歌搜索“通过引用和值传递参数”

您将了解到:

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);

您的问题是,C++中,对象是按值传递的,直到您指定了其他对象。因此,在<代码> Read MePyErErrORD 中,您处理的是代码>的副本,而不是使用<代码> EngEsAs/Cuth>本身。

将引用传递给您的
readempoyerecord
函数。
readempoyerecord
的签名应为:

void readEmpoyeeRecord(Employee &employee)
readempoyerecord(Employee)
是按值复制的,而不是引用,因此您正在丢失更改


使用
readempoyerecord(Employee&Employee)

你能描述一下你所说的“根本不起作用”是什么意思吗?发生了什么,你期望发生什么?哦,当然!我以前也遇到过路过推荐人,但这周我有点慢哈..谢谢!