我不想使用默认的构造函数,所以我实现了我的
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;}
}
然后错误:
no appropriate default constructor of A found.
最佳答案
使用构造函数初始化列表,因此成员a
是通过复制构造函数初始化的:
B(const A&a):a(a){}
如果您不使用构造函数初始化列表,则编译器首先尝试初始化 A a;
,并且仅在将其他 a
分配给它之后。但是,第一次初始化失败,因为没有提供默认构造函数。一般来说,建议在初始化成员时始终使用构造函数初始化列表。这样就不用调用一个构造函数+一个赋值运算符,而只调用复制构造函数。
我建议将成员的名称从 a
更改为例如_a
,这样代码就变得更加清晰了。
关于c++ - 未找到默认构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30090718/