Pourquoi le compilateur ne trouve-t-il pas la signature de la fonction de classe de base? Modification foo(a1)
à B::foo(a1)
fonctionne.Problème de fonction surchargé C++
code:
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 ;
}
erreur du compilateur (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
-vous obtenir cette erreur sur la dernière ligne de 'C :: foo' ou 'main'? –
L'erreur est à 'foo (a1)' dans 'C :: foo()'. – swongu
Il est appelé "nom caché". Lisez la FAQ: http://www.parashift.com/c++-faq-lite/strange-inheritance.html#faq-23.9 – AnT