【问题标题】:How are member instances in C++ constructed? [duplicate]C++ 中的成员实例是如何构造的? [复制]
【发布时间】:2017-12-25 21:24:32
【问题描述】:

我有一个名为A 的课程。

它有一个实例或B:

public:
    B inst;

B 的构造函数类似于B::B(int, int)

创建A 类的构造函数A::A() { } 时,出现以下错误:

B::B()的调用没有匹配的函数

当我没有在A 的构造函数中创建或提及任何 B 时。有什么想法吗?

【问题讨论】:

    标签: c++


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      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 的构造函数。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-10-04
        • 2011-06-23
        • 2012-08-21
        • 2012-11-27
        • 2011-08-07
        • 1970-01-01
        相关资源
        最近更新 更多