首页 > 解决方案 > 错误:“没有匹配的函数调用 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;
}

标签: c++oop

解决方案


之所以调用它,是因为在输入构造函数主体之前Person初始化了成员 - 在您的构造函数中,您正在分配成员,而不是初始化它们。
由于您没有显式初始化成员,因此首先默认初始化它们。

使用初始化列表进行初始化:

Person::Person(const string &name,
               const string &address,
               const Date &date)
    : Name(name),
      Address(address),
      DateOfBirth(date)
{
    // Nothing needs to be done here.
}

推荐阅读