类中的类的构造方法

时间:2015-04-13 10:14:40

标签: c++ class oop constructor nested

我有2个课程,DateEmployee

//Date
class Date
{
private:
    int dd;
    int mm;
    int yy;
public:
    Date (int, int, int);
    void setDate (int, int, int);
    int getDD();
    int getMM();
    int getYY();
};

//Employee
class Employee
{
private:
    int ID;
    string qualification;
    double salary;
    Date DOB;
    Date dateJoined;
public:
    Employee();
    void setEmployee (int, string, double, Date, Date);
    Date getDOB();
    Date getDateJoined();
    string getQualification();
    void displayEmployee();
};

这是我Employee类的构造函数。

Employee::Employee()
{
    ID = 0;
    qualification =" " ;
    salary=0.0;
    Date DOB();
    Date dateJoined();
}

我收到错误C2512:'日期' :没有适当的默认构造函数可用。

如何在DOB课程中初始化dateJoinedEmployee

2 个答案:

答案 0 :(得分:1)

问题是在输入Employee构造函数体之前,构造了所有数据成员。在这种情况下,DOBdateJoined需要默认初始化,但您的Date类没有默认构造函数。您的两个主要选项是为Date添加默认构造函数,或者在Employee构造函数初始值设定项列表中初始化这些成员。

选项1:

class Date
{
    Date (); //define this somewhere
};

选项2:

Employee::Employee() :
    ID(0),
    qualification(" "),
    salary(0.0),
    DOB(/*some data, maybe taken in as constructor args*/),
    dateJoined(/*ditto*/)
{ }

答案 1 :(得分:0)

尝试此修改。你需要一个构造函数Date()

class Date
{
private:
    int dd;
    int mm;
    int yy;
public:
    Date () {return;}
    Date (int, int, int);
    void setDate (int, int, int);
    int getDD();
    int getMM();
    int getYY();
};

另一种解决方案是:

Employee::Employee():
   DOB(0,0,0),
   dateJoined(0,0,0)
{
    ID = 0;
    qualification =" " ;
    salary=0.0;
}