c++ - 在 C++ 中使用构造函数+继承进行类到类的转换

标签 c++ inheritance constructor

在这里,我可以将 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/

相关文章:

c++ - cout 打印对象 getter 后崩溃

c++ - 从 C++ 中的空基类继承

c# - 通用 C# 复制构造函数

c++ - 为什么 nullptr 是核心语言的一部分,而 nullptr_t 是 STL 的一部分?

c++ - 使用 vector 时出现段错误

c++ - 编译器错误 LKN2019 : Unresolved external symbol when dealing with inheritance

java - 如何创建接受值数组的类构造函数?

C++ 复制构造函数对成员初始化进行双重调用

c++ - 在这种情况下,放入 decltype(x) 以指定返回类型的语法是什么

c++ - AFAIK,下面的代码不应该编译,但它在 clang 和 GCC 中编译。我在这里错过了什么?