C++将一个类成员传递到另一个类函数中



我有几个班级Staff、AcademicStaff和Department(单独的头文件)。我有一个班级成员AcademicStaff*headOfDepartment进入Department班级。我需要创建一个部门主管。我实施了部门,然后我需要设置部门负责人。此外,我还在main.cpp中注销了我的部门。以下是对学术人员职能的解读。在主功能中,我从用户那里获得以下输入。`AcademicStaff::AcademicStaff(int staffID,char*firstName,char*lastName,int telNo,char*address,char*email,int annualSalary,char*title,char*status):员工(员工ID、名字、姓氏、电话号码、地址、电子邮件、年薪){

title = new char[50];
status = new char[20];
if (strcmp(title, "Professor") == 0 || strcmp(title, "Research Professor") == 0 || strcmp(title, "Associate Professor") == 0 || strcmp(title, "Assistant Professor") == 0 || strcmp(title, "Instructor") == 0)
{
cout << "title is defined" << endl;
strncpy(this->title, title, 50);
cout << "title is defined"<<endl;
}
else
cout << "The title which is entered in not valid" << endl;`

我写了一个函数,将部门负责人设置在部门课上。

void setheadOfDepartment(AcademicStaff&);// in department.h`
// declaration in department.cpp 
void Department::setheadOfDepartment(AcademicStaff &professors){
this->headOfDepartment = &professors;
}

/* declaration in department.h */ 
AcademicStaff *getheadOfDepartment();`

/* declaration in department.cpp */
AcademicStaff *Department::getheadOfDepartment(){
return headOfDepartment;
}

调用main.cpp:中的函数时

AcademicStaff headOfDepartment(staffID, firstName, lastName, telNo, 
address, email, annualSalary, 
title, status);
myDepartment.setheadOfDepartment(headOfDepartment);

当我想获得部门主管的详细信息时,我得到了一个值0029fdc0。然而,我必须看到这样的简历:name,lastname,ıd等。这个代码中有什么错误?非常感谢。

如果参数是通过值传递的,则引用本地副本:

Department::setheadOfDepartment(AcademicStaff professors)

任务采用该副本的地址,而不是您传入的地址:

this->headOfDepartment = &professors;

将参数签名更改为

Department::setheadOfDepartment(AcademicStaff& professors)
// ^

通过引用传递,以获取最初传递的变量的地址。

或者传递指针参数

Department::setheadOfDepartment(AcademicStaff* professors)

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

如果你想传递一个指针,那么把你的函数声明为接受一个指针AcademicStaff* professors,然后把一个先前初始化的指针传递给它

你看到一个地址是因为你可能显示的是一个指针,而不是它指向的东西,所以你做了一些类似的事情

cout << headOfDepartment;

而不是

cout << headOfDepartment->name;

在任何情况下,首先修复悬挂指针问题,这是一个主要问题。

相关内容

  • 没有找到相关文章

最新更新