父类的复制构造函数中的嵌套类缺少默认构造函数

时间:2014-04-04 20:40:51

标签: c++ class

我有一个嵌套的类结构,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

有关如何解决此问题的任何想法?

2 个答案:

答案 0 :(得分:3)

您需要在两个构造函数中使用成员初始值设定项:

A::A() : b(Var1, Var2) {}
A::A(const A& a) : b(Var1, Var2) {}

答案 1 :(得分:1)

您定义了一个带有两个参数B(var1, var2)的构造函数,因为这样的默认构造函数不会自动为您提供。

所以你有几个选择。

选择1

b定义

中为struct B添加默认构造函数
struct B{
    ....
    B() {};
}

下面的语法也应该是错误的:

A::A() : b() {};
A::A( const A& a) : b() {};

选择2

你可以使用B的非默认构造函数,但你必须从某个地方提出值

A::A() : B( valA, valB ) {};
A::A( const A& a) : b(valA, valB) {};

选择3

您可能不想要,而应为B创建一个复制构造函数并执行此操作

A::A( const A& a) : b(a.b) {};
相关问题