c ++:在构造函数中定义类的问题

时间:2012-07-01 18:00:26

标签: c++ constructor

在对象的构造函数中,我有以下代码:

ConfigReader::ConfigReader(){
    TiXmlDocument doc(CONFIGURATION_FILE_LOCATION);
    configDoc = TiXmlHandle(&doc);
}

当我尝试编译时,我收到以下警告:

no matching funciton for call to 'TiXmlHandle::TiXmlHandle();

configDoc是我的h文件中定义的TiXmlHandle,作为该类的私有变量。这两个类都来自TinyXML C ++项目,但这几乎不相关。编译器是正确的,TiXmlHandle没有默认构造函数。但是,由于我使用有效的构造函数构造TiXmlHandle,理论上这应该不重要。

那么告诉C ++不要试图用默认构造函数创建TiXmlHandle的语法是什么,因为我只是要覆盖它?

我为这个简单的问题道歉,我知道这是我应该能够查找的那种东西,但我已经尝试过但无法找到答案。

1 个答案:

答案 0 :(得分:3)

configDoc正在默认构建,然后,您尝试复制将其分配给TiXmlHandle(&doc)TiXmlHandle显然不能默认构造,因此这不起作用。默认构造是隐式发生的,因为您没有使用成员初始化列表覆盖它。

您使用成员初始化列表,如下所示:

ConfigReader::ConfigReader()
    : configDoc(/*args*/)
{
    // ...
}

显然,要将正确的参数传递给该位置的configDoc,您必须稍微重构一下代码。也许你的TiXmlDocument也应该是会员。有很多重构选项;你可以自己解决这个问题。