Нет соответствия функции - Специализированная подпись скрывается Общий? - PullRequest
0 голосов
/ 20 октября 2010

Я только что застрял со следующей ошибкой компилятора 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;
};

Странно также то, что когда я перекомпилирую (make clean; make) код, я получаю сообщение об ошибке. Если я добавлю пробел "" в вызывающем коде (main.cpp) - впоследствии компиляция будет успешной - и я понятия не имею, почему ...

Большое спасибо,

Charly

PS: я использую gcc 4.4.5 с Debian Squeeze, создателем qt в качестве IDE с qt 4.6 - но эта проблема не зависит от Qt.

1 Ответ

1 голос
/ 20 октября 2010

Я не уверен, почему вы думаете, что должна быть функция EPTDerivedException::HandleClass( BaseClass oBase ).Там нет такой декларации.

Возможно, вам нужно добавить using EPTException::HandleClass; к EPTDerivedException?

...