【发布时间】:2009-11-25 19:47:09
【问题描述】:
为什么编译器找不到基类函数签名?将 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或main的最后一行收到该错误? -
错误位于
foo( a1 )inC::foo()。 -
它被称为“名称隐藏”。阅读常见问题解答:parashift.com/c++-faq-lite/strange-inheritance.html#faq-23.9
标签: c++ inheritance