我有几个班级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;
在任何情况下,首先修复悬挂指针问题,这是一个主要问题。