【问题标题】:Avoid default constructor for member variable避免成员变量的默认构造函数
【发布时间】:2013-03-15 17:56:05
【问题描述】:

我有一个类有另一个类的成员变量:

class MeasurementUnit {
private:
    MeasurementMultiplier _multiplier;

实际上我不需要MeasurementMultiplier 的默认构造函数,因为实际上我将使用参数MeasurementMultiplier(a,b,c) 进行初始化,我会 - 但不能直接:

C2864: 'MeasurementUnit::_multiplier' :
only static const integral data members can be initialized within a class

所以我需要默认构造函数,没有它就无法编译error: C2512: 'MeasurementUnit' : no appropriate default constructor available

我可以避免需要默认构造函数吗?

【问题讨论】:

标签: c++ default-constructor


【解决方案1】:

在你的类MeasurementUnit的所有构造函数中,你需要在初始化列表中初始化成员变量_multiplier。示例:

MeasurementUnit::MeasurementUnit()
  : _multiplier(1,2,3)
{}

【讨论】:

  • 对不起,我不明白。这样你就有了一个默认的构造函数,这是我想要避免的。
  • @HorstWalter:在这种情况下,我不明白你的问题。我给出的示例引用了MeasurementUnit 的(默认)构造函数,以避免需要MeasurementMultiplier 的默认构造函数。如果这不是您想要的,请编辑并澄清问题。
  • @HorstWalter:我刚刚意识到我的错误,混淆了成员变量的名称和类型。我相应地编辑了答案,很抱歉它可能造成的混乱。
【解决方案2】:

使用 MIL - 成员初始化列表 MIL

【讨论】:

    猜你喜欢
    • 2015-07-03
    • 2016-08-08
    • 2015-06-21
    • 1970-01-01
    • 2012-08-13
    • 2018-10-28
    • 1970-01-01
    • 2012-09-01
    • 2018-05-13
    相关资源
    最近更新 更多