C++ C++;:“派生类”;没有匹配的构造函数“;错误

C++ C++;:“派生类”;没有匹配的构造函数“;错误,c++,class,derived-class,C++,Class,Derived Class,我做这个作业已经有一段时间了。以下是说明: 您需要设计一个名为Employee的抽象类,其成员为 如下所示(对其进行保护): 数据成员:字符*名称,长整型ID 两个构造函数:一个默认构造函数//初始化数据memebrs以 默认值和复制构造函数 方法:setPerson(char*n,long int id)//允许用户设置 每个人的信息一个名为Print()//的函数应该是 虚拟函数,用于打印类的数据属性。和 析构函数 还定义两个派生自Employee类的类,称为 经理兼秘书。每个类都应从 基类

我做这个作业已经有一段时间了。以下是说明:

您需要设计一个名为Employee的抽象类,其成员为 如下所示(对其进行保护):

数据成员:字符*名称,长整型ID

两个构造函数:一个默认构造函数//初始化数据memebrs以 默认值和复制构造函数

方法:setPerson(char*n,long int id)//允许用户设置 每个人的信息一个名为Print()//的函数应该是 虚拟函数,用于打印类的数据属性。和 析构函数

还定义两个派生自Employee类的类,称为 经理兼秘书。每个类都应从 基类,并有自己的数据成员和成员函数。 经理应该有一个名为degree的数据成员 本科学位(如文凭、学士、硕士、博士) 秘书应该有她的合同(可以是1/0的布尔值 (永久/临时)

派生类的所有成员函数都应从其 基类

编写以下main()来测试类

int main() {
Employee * p = new Manager(“Bruce Lee”, 0234567, “Dr.”);
P.print();
Secretary p2;
p2.setPerson(“Wilma Jones”, 0341256, “permanent”);
delete p;
p = & p2;
p.Print();
return 0;
}
这是我到目前为止所想到的一切,但我很确定它充满了错误,我的参数和变量类型都不正确

#include <iostream>
using namespace std;


class Employee{
protected:
    char *name;
    long int ID;
public:
    Employee();
    Employee(Employee&);
    void setPerson(char * n, long int eID) {
        name = n;
        ID = eID; };
    virtual void Print(){
        cout << "Name: " << name << endl;
        cout << "ID: " << ID << endl; };
};

class Manager: public Employee {
protected:
    char *degree;
public:
    void setPerson(char * n, long int eID, char * d){
        name = n;
        ID = eID;
        degree = d;
    };
    void Print() {
        cout << "Name: " << name << endl;
        cout << "ID: " << ID << endl;
        cout << "Degree: " << degree << endl;
    };
};

class Secretary: public Employee {
protected:
    bool contract;
public:
    void setPerson(char * n, long int eID, string c){
        name = n;
        ID = eID;
        if (c == "permanent") contract = true;
        else contract = false;
    };
    void Print(){
        cout << "Name: " << name << endl;
        cout << "ID: " << ID << endl;
        cout << "Contract: " << contract << endl;
    };
};

int main() {
    Employee * P = new Manager("Bruce Lee", 0234567, "Dr.");
    P.Print();
    Secretary P2;
    P2.setPerson("Wilma Jones", 0341256, "permanent");
    delete P;
    P = & P2;
    P.Print();
    return 0;
}
#包括
使用名称空间std;
班级员工{
受保护的:
字符*名称;
长int-ID;
公众:
雇员();
员工(员工&),;
void setPerson(字符*n,长整数eID){
name=n;
ID=eID;};
虚拟空打印(){

cout您得到的错误非常直接:您没有任何
Manager
(或
Employee
)的构造函数将字符串、整数(?)和字符串作为参数。

您已经声明了构造函数Employee,但没有定义它。 看看你声明的publc下的employee类

Employee();
Employee(Employee&);
但您尚未定义函数。您需要

Employee :: Employee()
{
    bla bla bla
}

另一个用于另一个签名。

第57行和第62行的错误,其中显示
p.Print();
没有给出您提到的错误。更可能的是,他们给出了“.Print”左边的
,必须有class/struct/union
错误消息。@RawN my第62行与这里的第62行不同(因为Xcode在开头添加了注释)这就是为什么我指定它是主代码的第一行,但你是正确的,因为打印函数也不工作。我没有提到它,因为我认为这是管理器未初始化时的错误。不过我应该使用char*和int作为参数。这让我很困惑。另外,我将所有字符都改为stri它仍然给我同样的错误。@hopillium你给Manager添加了一个“Manager(…)”构造函数了吗?