【问题标题】:How i can call enclosed class object's constructor in enclosing class我如何在封闭类中调用封闭类对象的构造函数
【发布时间】:2019-11-15 14:47:35
【问题描述】:

考虑一下这段代码。

class A{
    public:
    A(): a(10) {}
    int a ;
};
class B{
public:

    B() : A::A(){}
    A a;

};

编译器给了我一个警告

error: type 'A' is not a direct base of 'B'|

我理解错误,但我如何在 B 的构造函数中调用 A 的构造函数。任何替代方案。

Ik 这是一个隐式调用,但我需要一个显式调用。正如编译器所说。

warning: 'B::a' should be initialized in the member initialization list [-Weffc++]|

附: - 不推荐继承。我做不到。

【问题讨论】:

  • as 构造函数已被隐式调用
  • B() : a() {}?
  • xy problem 为什么你认为需要调用A 的构造函数?
  • @foreknownas_463035818 这不是 XY 问题。我启用了编译器警告,它说要在 B 的初始化列表中对其进行初始化。我发现这很烦人。
  • @Problematic "_ 我已启用编译器警告,它说要在 B 的初始化列表中对其进行初始化。_" 1) 我觉得您误解了警告。如果您因为警告而提出此类问题,请在您的问题中提供警告,我们将帮助您解决警告。 2)您的此类评论表明,这实际上是一个 XY 问题。

标签: c++ class constructor


【解决方案1】:

看来你的意思

class B{
public:

    B() : a(){}
    A a;

};

虽然它是多余的,因为在任何情况下,数据成员 a 都将使用类 A 的默认构造函数进行默认初始化。

【讨论】:

    猜你喜欢
    • 2015-05-30
    • 1970-01-01
    • 2010-12-16
    • 1970-01-01
    • 1970-01-01
    • 2017-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多