在这里,我可以将 emp
类对象转换为 emp
类对象。但是我无法将 employee
类对象转换为 emp
类对象 - 我在出现错误的地方添加了注释 - 'setEmpID' 不是成员“员工”
。我应该怎么做才能解决这个错误? (我正在准备 C++ 考试,这是我唯一无法解决的问题)。
编辑 - 看到这是程序的定义 - 有两个类 Emp 和 Employee.Emp 在工资单部门中定义,包含有关员工 ID 的详细信息和有关他/她的付款的详细信息。 Employee 是人力资源部门类,仅包含基本工资详细信息和完整的个人详细信息,如配偶姓名、子女数量、以前的经历 员工等。在 Emp 类中添加代码,以便从一种类型的转换 employee 对象变成另一个是可能的。转换时,源类中不存在的项目(如源类为 Employee 时的 child 数量)应采用默认值。
#include<iostream.h>
#include<conio.h>
#include<string.h>
class employee;
class emp
{
private:
unsigned int empID;
public:
emp(){
empID=0;
}
emp(unsigned int x){
empID=x;
}
emp(employee tmp) {
// i am getting error here.
tmp.setEmpID(10);
}
void setEmpID(unsigned int x){
empID=x;
}
int getEmpID(){
return empID;
}
};
class employee : public emp {
private:
char name[30];
public:
employee();
employee(unsigned int x);
employee(unsigned int x,char y[]);
employee(emp tmp);
void display();
};
employee :: employee()
{
emp();
name[0]='\0';
}
employee :: employee(unsigned int x)
{
emp(x);
name[0]='\0';
}
employee :: employee(unsigned int x,char y[]) : emp(x)
{
strcpy(name,y);
}
employee :: employee(emp tmp) : emp( tmp.getEmpID() )
{
name[0]='\0';
}
void employee :: display(){
cout<<"No is -> "<<getEmpID()<<endl<<"Name -> "<<name;
}
void main() {
clrscr();
emp e1(10);
employee e2(10u,"nimita");
cout<<e1.getEmpID()<<endl;
e2.display();
getch();
}
最佳答案
在调用 tmp.setEmpID(10)
时,类 employee
的定义还没有被编译器看到,因为它只是前向声明的。所以编译器还不知道类的方法。
换句话说,这是一种循环依赖。幸运的是,通过将 emp(employee tmp)
的实现移动到例如cpp 文件,其中两个类定义都是可见的。
关于c++ - 在 C++ 中使用构造函数+继承进行类到类的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3238329/