我不想使用默认构造函数,所以我实现了我的
class A
{
public:
A(int&i);
A& operator=(const A& a);
A(const A&a);
};
但在B级
class B
{
A a;
public:
B(const A&a){this->a=a;}
}
然后是错误:
找不到合适的默认构造函数。
答案 0 :(得分:3)
使用构造函数初始化列表,因此通过复制构造函数初始化成员a
:
B(const A&a):a(a){}
如果您不使用构造函数初始化列表,则编译器首先尝试初始化A a;
,并且仅在将另一个a
分配给它之后。但是,第一次初始化失败,因为没有提供默认构造函数。通常,建议在初始化成员时始终使用构造函数初始化列表。这样,您只需调用复制构造函数,而不是调用一个构造函数+一个赋值运算符。
我建议将会员名称从a
更改为_a
,因此代码变得更加清晰。