请帮助我解决以下问题:
我有以下课程:
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 )
{
...
}