我有一个嵌套的类结构,A类是父类,B类是嵌套的。 编译代码时,A类的复制构造函数报告B类没有默认构造函数。
error: no default constructor exists for class "A::B"
class A{
-------
struct B{
B(var1, var2){}
};
B b;
};
A::A(){ b = new B(Var1, Var2) } // default constructor
A::A(a){ } // copy constructor
有关如何解决此问题的任何想法?
答案 0 :(得分:3)
您需要在两个构造函数中使用成员初始值设定项:
A::A() : b(Var1, Var2) {}
A::A(const A& a) : b(Var1, Var2) {}
答案 1 :(得分:1)
您定义了一个带有两个参数B(var1, var2)
的构造函数,因为这样的默认构造函数不会自动为您提供。
所以你有几个选择。
在b
定义
struct B
添加默认构造函数
struct B{
....
B() {};
}
下面的语法也应该是错误的:
A::A() : b() {};
A::A( const A& a) : b() {};
你可以使用B的非默认构造函数,但你必须从某个地方提出值
A::A() : B( valA, valB ) {};
A::A( const A& a) : b(valA, valB) {};
您可能不想要,而应为B
创建一个复制构造函数并执行此操作
A::A( const A& a) : b(a.b) {};