我有2个课程,Date
和Employee
。
//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
课程中初始化dateJoined
和Employee
?
答案 0 :(得分:1)
问题是在输入Employee
构造函数体之前,构造了所有数据成员。在这种情况下,DOB
和dateJoined
需要默认初始化,但您的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;
}