当我在函数中定义时,cpp 组合中没有定义

No definition in cpp composition when I define in function

#include <iostream>

using namespace std;

class Date{

private:
    int day;
    int month;
    int year;

public:
    Date(int dy,int mt,int yr){
        day=dy;
        month=mt;
        year=yr;
    }
    void showDate(){
    cout<<day<<"/"<<month<<"/"<<year<<endl;
    }

};

class Human{
private:
    string name;
    Date birthDay;
public:
    Human(string nm,Date bd):name(nm),birthDay(bd){};

    showHumanInfo(){
        cout<<"The person named : "<<name<<" was born : ";
        birthDay.showDate();
    }

};

int main()
{
    Date birthday(1,2,1995);
    Human h1("alek",birthday);
    h1.showHumanInfo();
    return 0;
}

这是有效的,但为什么当我执行以下操作时它不起作用?

#include <iostream>

using namespace std;

class Date{

private:
    int day;
    int month;
    int year;

public:
    Date(int dy,int mt,int yr){
        day=dy;
        month=mt;
        year=yr;
    }
    void showDate(){
    cout<<day<<"/"<<month<<"/"<<year<<endl;
    }

};

class Human{
private:
    string name;
    Date birthDay;
public:
    Human(string nm,Date bd){
        name = nm;
        birthDay = bd;
        }

    showHumanInfo(){
        cout<<"The person named : "<<name<<" was born : ";
        birthDay.showDate();
    }

};

int main()
{
    Date birthday(1,2,1995);
    Human h1("alek",birthday);
    h1.showHumanInfo();
    return 0;
}

我有这样的问题。为什么我不能在人类 class 中使用日期 class?

当我像那样改变人类publicclass

public:
human(){
 //  ...
}

它不起作用它的想法是一样的,但没有在人类 class 中添加日期 class。

在构造函数的定义中,所有的成员变量必须在构造函数体执行之前进行初始化。由于 Date 没有默认构造函数,因此无法对其进行初始化

Human(string nm, Date bd)
{  // birthDay must be initialized before this point
   // ...
   birthDay = bd; // this is assignment, which is too late
}

解决方法是给 Date 一个默认构造函数(如果有意义的话),或者在成员初始化列表中初始化 birthDay,就像您在第一个示例代码中所做的那样。

我认为问题来自“birthday = bd;”

自从我上次用 C++ 编写代码以来已经有一段时间了,但如果我没记错的话,使用构造函数初始化器和使用等于运算符是不一样的。

您应该覆盖“=”运算符以将其用于您的对象。

About his