请帮助我解决以下问题:

我有以下课程:

class ChemicalElement
{
private:
    std::string _name;
    void Init(const std::string& name);
public:
    ChemicalElement(const std::string& name);
    ChemicalElement(const ChemicalElement& ce);
};

class CombinationRule
{
private:
    ChemicalElement _ce1;
    ChemicalElement _ce2;
    void Init(const ChemicalElement& ce1, const ChemicalElement& ce2);
public:
    CombinationRule(const ChemicalElement& ce1, const ChemicalElement& ce2);
    CombinationRule(const CombinationRule& rule);
};


实现是显而易见的。我打算使用Init方法初始化CombinationRule,以最大程度地减少代码重复。 las,如果我在每个构造函数中均未使用“成员初始化列表”,则编译器会抱怨“错误C2512:'ChemicalElement':没有合适的默认构造函数”。有没有解决此错误的优雅方法,而不是使用默认构造函数或成员初始化列表?
顺便说一句:如果类定义中还有其他问题,也请添加它。由于我正在重新研究C ++,因此我想意识到它们。

最佳答案

您应按以下方式实现CombinationRule的构造函数,以便它们将使用ChemicalElement的适当构造函数:

CombinationRule::CombinationRule(const ChemicalElement& ce1,
  const ChemicalElement& ce2) : _ce1(ce1), _ce2(ce2)
{
  ...
}

CombinationRule::CombinationRule(const CombinationRule& rule) :
  _ce1( rule._ce1 ), _ce2( rule._ce2 )
{
  ...
}

10-08 00:32