C++ C++;将类成员传递给另一个类函数

C++ C++;将类成员传递给另一个类函数,c++,string,compare,strcmp,C++,String,Compare,Strcmp,我有几个类:职员、院士和部门(单独的头文件)。我有一个类成员院士职员*部门负责人进入部门类。我需要创建一个部门负责人。 我实施了部门,然后我需要设置部门负责人。我还在main.cpp中声明了部门myDepartment。 这是学术人员功能的声明。在主功能中,我从用户处获得以下输入。 `AcademicStaff::AcademicStaff(内部职员,char*firstName,char*lastName,内部电话号码,char*地址,char*电子邮件,内部年度日历,char*标题,char

我有几个类:职员、院士和部门(单独的头文件)。我有一个类成员院士职员*部门负责人进入部门类。我需要创建一个部门负责人。 我实施了部门,然后我需要设置部门负责人。我还在main.cpp中声明了部门myDepartment。 这是学术人员功能的声明。在主功能中,我从用户处获得以下输入。 `AcademicStaff::AcademicStaff(内部职员,char*firstName,char*lastName,内部电话号码,char*地址,char*电子邮件,内部年度日历,char*标题,char*状态): 员工(职员、名、姓、电话号码、地址、电子邮件、年度日历){



main.cpp
中调用函数时:

AcademicStaff headOfDepartment(staffID, firstName, lastName, telNo, 
                               address, email, annualSalary, 
                               title, status);
myDepartment.setheadOfDepartment(headOfDepartment);
当我想得到部门负责人的详细信息时,我得到了一个值0029fdc0。但是我必须看到这样的结果:name、lastname、ıd等等。 此代码中的错误是什么?
谢谢。

您正在按值将一个
AcademicsAff
对象传递给您的函数。编译器将创建一个名为
professors
的本地副本,然后您获取其中的地址并将其传递给
this->headOfDepartment
。在函数退出时,临时
professors
将被销毁,因此你最后得到了一个悬空的指针,所有的赌注都输掉了

如果要传递指针,则将函数声明为获取指针,并向其传递以前初始化的指针

您之所以看到地址,是因为您可能会显示一个指针,而不是它所指向的内容,所以您可以执行以下操作

cout << headOfDepartment;

cout如果参数按值传递,则您正在引用本地副本:

Department::setheadOfDepartment(AcademicStaff professors)
作业采用该副本的地址,而不是您传入的地址:

this->headOfDepartment = &professors;
将参数签名更改为

Department::setheadOfDepartment(AcademicStaff& professors)
                                          // ^
passbyreference,获取最初传递的变量的地址

或传递指针参数

Department::setheadOfDepartment(AcademicStaff* professors)

我照你说的做了。但是,结果是一样的。@emre你如何调用该函数?你选择了哪种建议的解决方案?请回答你的问题,添加额外的信息并加以改进。你能举一个例子:(1)在哪里调用
setheadOfDepartment
函数?和(2)您试图在何处显示这些内容?这可能是由于
AcademicStaff
被破坏的问题,这会给您提供一个无效的引用。当我想获取部门负责人的详细信息时,我得到了一个值0029fdc0,这是什么意思?您在做
cout
AcademicStaff部门负责人(…)
变量超出范围?它是否意味着是类成员?它是否真的是一个函数,如果是的话,结果在哪里?请提供一个,因为你的问题无法回答。你的整个代码中可能有几个设计缺陷,这些缺陷无法通过逐步分析局部错误来修复。@πάνταῥεῖ 我添加了部分代码。
cout << headOfDepartment->name;
Department::setheadOfDepartment(AcademicStaff professors)
this->headOfDepartment = &professors;
Department::setheadOfDepartment(AcademicStaff& professors)
                                          // ^
Department::setheadOfDepartment(AcademicStaff* professors)