0

次のC++コンパイラエラーでスタックしました。

no matching function for call "EPTDerivedException::HandleClass( BaseClass& )"
candidates are: void EPTDerivedException::HandleClass( DerivedClass )

関数HandleClass(BaseClass)があるはずなので、これを説明することはできません。これは呼び出しコードです:

BaseClass oBase;
EPTDerivedException* pException2 = new EPTDerivedException;
pException2->HandleClass( oBase );

そしてこれはEPTDerivedExceptionのコードです:

class EPTDerivedException : public EPTException
{
public:
    EPTDerivedException();
    // generic function
    void HandleClass( DerivedClass oClass ) { Q_UNUSED(oClass); }
};

そして基本クラスの場合:

class EPTException
{
public:
    EPTException( QString strName );
    // specialized function
    void HandleClass( BaseClass oBase ) { Q_UNUSED(oBase); }
private:
    QString m_strName;
};

奇妙なことに、コードを再コンパイル(クリーンアップ、メイクアップ)すると、エラーメッセージが表示されます。呼び出し元のコード(main.cpp)にスペース ""を追加すると(その後のコンパイルは成功します)、理由がわかりません...

どうもありがとう、

チャーリー

PS:私はDebianSqueezeでgcc4.4.5を使用していますが、qt4.6ではIDEとしてqt-creatorを使用していますが、この問題はQtとは無関係です。

4

1 に答える 1

1

なぜ関数があるべきだと思うのかわかりませんEPTDerivedException::HandleClass( BaseClass oBase )。そのような宣言はありません。

おそらくあなたはに追加する必要がありますusing EPTException::HandleClass;EPTDerivedException

于 2010-10-20T09:47:46.093 に答える