C++重载函数问题

swo*_*ngu 0 c++ inheritance

为什么编译器找不到基类函数签名?更改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 ;
}
Run Code Online (Sandbox Code Playgroud)

编译器错误(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
Run Code Online (Sandbox Code Playgroud)

Jam*_*lis 5

名称会C::foo 影响名称B::foo.一旦编译器foo在C类中找到匹配,它就会停止搜索.

您可以通过添加以下内容来解决问题

using B::foo;
Run Code Online (Sandbox Code Playgroud)

到C类的主体,或者通过重命名B类的功能.