Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c++;:在构造函数中定义类的问题_C++_Constructor - Fatal编程技术网

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

C++ c++;:在构造函数中定义类的问题,c++,constructor,C++,Constructor,在对象的构造函数中,我有以下代码: ConfigReader::ConfigReader(){ TiXmlDocument doc(CONFIGURATION_FILE_LOCATION); configDoc = TiXmlHandle(&doc); } 当我尝试编译时,我得到以下警告: no matching funciton for call to 'TiXmlHandle::TiXmlHandle(); configDoc是在我的h文件中定义为类的私有变量的T

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

ConfigReader::ConfigReader(){
    TiXmlDocument doc(CONFIGURATION_FILE_LOCATION);
    configDoc = TiXmlHandle(&doc);
}
当我尝试编译时,我得到以下警告:

no matching funciton for call to 'TiXmlHandle::TiXmlHandle();
configDoc
是在我的h文件中定义为类的私有变量的
TiXmlHandle
。这两个类都来自TyyXML XC++项目,但这几乎不相关。编译器正确地指出,
TiXmlHandle
没有默认构造函数。但是,由于我正在使用有效的构造函数构造TiXmlHandle,因此理论上这并不重要

<如果有任何语法,如果C++,不必费心尝试用默认构造函数创建<代码> TiXmlHandle <代码>,因为我将要重写它。


对于这个简单的问题我深表歉意,我知道这是我应该能够查找的东西,但我已经尝试过了,但没有找到答案。

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

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

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

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

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

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

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

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

作为旁注,你是不是忘记了行末的分号(
)和
configDoc=blah blah blah
,还是只是问题中的一个输入错误?我没有复制粘贴这个(带有代码的计算机没有互联网访问权限)。所以这是一个输入错误,如果还有其他错误,我也不会感到惊讶,因为我用手快速地重新编写了它。另一方面,您正在堆栈上创建一个临时变量
doc
,并试图传递它的地址。我想,这会触发未定义的行为。顺便说一句,您是否忘记了行末带有分号(
)的
configDoc=blah blah
,或者这只是问题中的一个输入错误?我没有复制粘贴这个(带有代码的计算机没有internet访问权限)。所以这是一个输入错误,如果还有其他错误,我也不会感到惊讶,因为我用手快速地重新编写了它。另一方面,您正在堆栈上创建一个临时变量
doc
,并试图传递它的地址。我想这会引发未定义的行为。谢谢。我知道问题的原因,但不知道解决办法。正如我所怀疑的,有一个简单的语法来实现我想要的,但我不知道。不过,我有一个跟进问题。如果我没有定义默认的construcotr,而是使用“openConfigFile”方法,我就不会得到这个错误。为什么编译器生成的默认constructor在定义TiSmlHandler时没有遇到相同的问题?EitanT:我尝试了你提到的语法,但没有成功。具体地说,我得到了一个参数“taking address of temporary”,这当然是有效的,因为一旦构造函数返回,XmlDocument就会退出contaxt。是的,这意味着我最初发布的代码也有缺陷,原因完全相同(当处理程序仍然指向文档时,文档超出了范围)。以防万一我没有用这个问题来显示我的C++无知,还有更多的证据!非常感谢。我知道问题的原因,但不知道解决办法。正如我所怀疑的,有一个简单的语法来实现我想要的,但我不知道。不过,我有一个跟进问题。如果我没有定义默认的construcotr,而是使用“openConfigFile”方法,我就不会得到这个错误。为什么编译器生成的默认constructor在定义TiSmlHandler时没有遇到相同的问题?EitanT:我尝试了你提到的语法,但没有成功。具体地说,我得到了一个参数“taking address of temporary”,这当然是有效的,因为一旦构造函数返回,XmlDocument就会退出contaxt。是的,这意味着我最初发布的代码也有缺陷,原因完全相同(当处理程序仍然指向文档时,文档超出了范围)。以防万一我没有用这个问题来显示我的C++无知,还有更多的证据!