没有匹配函数-专用签名隐藏通用? 我刚刚被C++编译器错误卡住了: no matching function for call "EPTDerivedException::HandleClass( BaseClass& )" candidates are: void EPTDerivedException::HandleClass( DerivedClass )

没有匹配函数-专用签名隐藏通用? 我刚刚被C++编译器错误卡住了: no matching function for call "EPTDerivedException::HandleClass( BaseClass& )" candidates are: void EPTDerivedException::HandleClass( DerivedClass ),c++,gcc,overriding,hidden,gcc4,C++,Gcc,Overriding,Hidden,Gcc4,我无法解释这一点,因为应该有一个函数HandleClass(基类)。这是调用代码: BaseClass oBase; EPTDerivedException* pException2 = new EPTDerivedException; pException2->HandleClass( oBase ); 这是EPTDerivedException的代码: class EPTDerivedException : public EPTException { public: EPTD

我无法解释这一点,因为应该有一个函数HandleClass(基类)。这是调用代码:

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;
};
奇怪的是,当我重新编译(makeclean;make)代码时,我得到了错误消息。如果我在调用代码(main.cpp)中添加一个空格“”,那么之后的编译是成功的,我不知道为什么

非常感谢

谨慎的


PS:我将GCC4.4.5与Debian Squence一起使用,QtCreator与Qt4.6一起作为IDE使用-但这个问题与qt无关。

我不确定您为什么认为应该有一个
EPTDerivedException::HandleClass(BaseClass oBase)
函数。没有这样的声明


也许您需要使用EPTException::HandleClass添加
eptderivedeception

正如编译器所说,
void HandleClass(DerivedClass){Q_UNUSED(oClass);}
是DerivedClass中唯一的HandleClass。除非您按照本答案中的建议添加“using”,否则将隐藏基类方法。另外,代码应该接受Based和DerivedClass by reference或const reference,避免相对缓慢的复制。非常感谢。是的,这只是一个例子。最初我使用的是QSharedPointer,这会导致同样的问题,但会产生非常难看的错误消息,所以我决定不在这里发布它们:)