0

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

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使用默认构造函数创建 的语法是什么,因为我只是要覆盖它?

我为这个简单的问题道歉,我知道这是我应该能够查找的东西,但我已经尝试过并且无法偶然发现答案。

4

1 回答 1

3

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

您可以像这样使用成员初始化列表:

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

显然,要将正确的参数传递到configDoc该位置,您必须稍微重构代码。也许您TiXmlDocument也应该成为会员。有很多重构选项;你可以自己弄清楚那部分。

于 2012-07-01T18:03:53.057 回答