0

オブジェクトのコンストラクターには、次のコードがあります。

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

コンパイルしようとすると、次の警告が表示されます。

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

configDocTiXmlHandleクラスのプライベート変数として私のhファイルで定義されています。どちらのクラスも TinyXML C++ プロジェクトからのものですが、ほとんど関係ありません。の既定のコンストラクターがないというコンパイラーの指摘は正しいですTiXmlHandle。ただし、有効なコンストラクターを使用して TiXmlHandle を構築しているため、これは理論的には問題になりません。

TiXmlHandleでは、オーバーライドするだけなので、デフォルトのコンストラクターを使用して作成しようとするのを気にしないように C++ に指示する構文があれば、それは何ですか?

簡単な質問で申し訳ありませんが、これは私が調べることができるはずの種類のものであることを知っていますが、試してみましたが、答えにつまずくことができませんでした.

4

1 に答える 1

3

configDocはデフォルトで構築されており、後でそれを にコピーして割り当てようとしていますTiXmlHandle(&doc)。ATiXmlHandleは明らかにデフォルトで構築できないため、これは機能しません。メンバー初期化リストを使用してオーバーライドしていないため、既定の構築は暗黙的に行われます。

次のようにメンバー初期化リストを使用します。

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

明らかに、その場所に適切な引数を渡すにはconfigDoc、コードを少し再構築する必要があります。おそらくあなたTiXmlDocumentもメンバーになるべきです。多くのリファクタリング オプションがあります。その部分は自分で把握できます。

于 2012-07-01T18:03:53.057 に答える