当我在函数中定义时,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++ 编写代码以来已经有一段时间了,但如果我没记错的话,使用构造函数初始化器和使用等于运算符是不一样的。
您应该覆盖“=”运算符以将其用于您的对象。
#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++ 编写代码以来已经有一段时间了,但如果我没记错的话,使用构造函数初始化器和使用等于运算符是不一样的。
您应该覆盖“=”运算符以将其用于您的对象。