错误:“没有匹配的函数调用Date::Date()”
我尝试为类实现构造函数Person(请参阅文章末尾的代码)。Codeblocks 给出了第 37 行的错误(即const Date &date)):
error: no matching function for call to 'Date::Date()'
为什么Date要调用构造函数?如何修复错误?
class Date
{
public:
Date(int day, int month, int year);
int GetYear() const;
private:
int Day;
int Month;
int Year;
};
Date::Date(int day, int month, int year){
Day = day;
Month = month;
Year = year;
}
class Person
{
public:
Person(const string &name, const string &address, const Date &date);
string GetAddress() const;
string GetName() const;
private:
string Name;
string Address;
Date DateOfBirth;
};
Person::Person(const string &name,
const string &address,
const Date &date)
{
Name = name;
Address = address;
DateOfBirth = date;
}
回答
之所以调用它,是因为成员在输入构造函数体之前被初始化——在你的Person构造函数中,你是分配给成员,而不是初始化它们。
由于您没有显式初始化成员,因此它们首先被默认初始化。
使用初始化列表进行初始化:
Person::Person(const string &name,
const string &address,
const Date &date)
: Name(name),
Address(address),
DateOfBirth(date)
{
// Nothing needs to be done here.
}