#include
#include
class Base{
public:
int k;
Base(int n):k(n){};
};
class Big{
public:
int v;Base b;
Big(int n):v(n),b(n){};
Big(const Big & bi){
v=bi.v;
b.k=bi.b.k;
}
};
int main(){
Big a1(5);Big a2=a1;
printf("%d,%d",a1.v,a1.b.k);
printf("%d,%d",a2.v,a2.b.k);
system("pause");
return 0;
}
说是类Base 没有合适的默认构造函数可用
class Base
{
public:
int k;
Base(int n):k(n){};
};
class Big
{
public:
int v;
Base b;
Big(int n):v(n),b(n){};
Big(const Big & bi):v(bi.v),b(bi.v)
{
v=bi.v;
b.k=bi.b.k;
}
};
int main()
{
Big a1(5);Big a2=a1;
printf("%d,%d",a1.v,a1.b.k);
printf("%d,%d",a2.v,a2.b.k);
system("pause");
return 0;
}
你在Big(const Big & bi){
这里没有对 b
进行带参数的显式构造啊,而自动的隐式构造又缺少无参数的 Base(){}
定义。
要用初始化列表,做如下修改试试:
Big(const Big & bi):b(bi.b){
v=bi.v;
}