为什么编译器找不到基类函数签名?将 foo( a1 )
更改为 B::foo( a1 )
有效。
代码:
class A1 ;
class A2 ;
class B
{
public:
void foo( A1* a1 ) { a1 = 0 ; }
} ;
class C : public B
{
public:
void foo( A2* /*a2*/ )
{
A1* a1 = 0 ;
foo( a1 ) ;
}
} ;
int main()
{
A2* a2 = 0 ;
C c ;
c.foo( a2 ) ;
return 0 ;
}
编译错误(VS2008):
error C2664: 'C::foo' : cannot convert parameter 1 from 'A1 *' to 'A2 *'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
最佳答案
名称 C::foo
阴影 B::foo
。一旦编译器在类 C 中找到匹配的 foo
,它就会停止进一步搜索。
您可以通过添加以下内容来解决您的问题:
using B::foo;
到类 C 的主体,或通过重命名类 B 中的函数。
关于C++重载函数问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1799497/