微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

没有用于调用 Employee::Employee() 错误的匹配函数

如何解决没有用于调用 Employee::Employee() 错误的匹配函数

当我在子类“Manager”中声明构造函数时,我认为我做错了什么。 不明白是不是两个类之间的继承问题。

员工.h

#ifndef EMP_IMP_H_INCLUDED
    #define EMP_IMP_H_INCLUDED
    #include<string>
    
    using namespace std;
    
    class Employee
    {
        private:
            string name;
            int salary;
    
        public:
            Employee(string n,int s){name=n; salary=s;};
            virtual ~Employee() {}
            //GetName();
            //GetSalary();
            //virtual PrintInfo();
    };
    
    class Manager:public Employee
    {
        private:
            int bonus;
    
        public:
            Manager(string n,int s,int b){name=n;salary=s;bonus=b;};
            virtual ~Manager() {};
            //GetBonus();
            //PrintInfo();
    };

#endif // EMP_IMP_H_INCLUDED

main.cpp

#include <iostream>
#include <string>
#include "Nodo.h"
#include "EMP_IMP.h"
using namespace std;
int main(){
    Employee *emp1=new Employee (string("ciro esposito",1000));
    Employee *emp2=new Employee(string("Gennaro Espostio"),2000);
    Employee *emp3=new Manager(string("Carmine Espostio"),2000,2000);
    Employee *emp4=new Manager(string("Salvatore Espostio"),3000,3000);  
}

解决方法

class Manager 的构造函数必须将 ns 参数传递给基类构造函数,而不是直接初始化基类数据成员。此外,虽然在构造函数体中赋值 bonus = b; 是有效的,但最好也将它放在初始化列表中:

Manager(string n,int s,int b) : Employee(n,s),bonus(b){}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。