如何构建C ++中的成员实例?

时间:2017-12-25 21:24:32

标签: c++

我有一个名为A的课程。

它有一个实例或B

public: B inst;

B的构造函数就像B::B(int, int)

创建A类的构造函数A::A() { }时,它会给我以下错误:

No matching function for call to B::B(),当我没有在A的构造函数中创建或提及任何B时。有什么想法吗?

2 个答案:

答案 0 :(得分:3)

构造A需要构建所有A的数据成员。在这种情况下,B必须是默认构造的,因为您没有提供成员初始化列表。当B定义非默认构造函数时,它的隐式默认构造函数的生成被抑制 - 这就是你得到错误的原因。

答案 1 :(得分:1)

当班级A包含班级B的实例时,构建A的实例也需要构建包含B的实例。

如果B的初始化中没有列出A的构造函数,则缺省情况是调用不接受任何参数的B构造函数。例如

 class A
 {
     public:
      A::A() {};

     private:

       B b;
 };

在功能上等同于

 class A
 {
     public:
      A::A() : b() {};

     private:

       B b;
 };

这涉及B的构造函数,没有参数。如果不存在此类构造函数,则结果为诊断(错误消息)。由于您已使用参数声明/定义了构造函数,因此不会隐式生成不带参数的B构造函数。