Salut à tous,
Le code suivant (test.cpp) ne compile pas avec gcc (gnu).

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
struct A { int getValue()		{ return 33 ; } } ;
struct B { int getValue( int i )	{ return i * 2 ; } } ;
struct C : public A, B			{} ;
 
int main( int, char *[] )
	{
	C c ;
	c.getValue( 5 ) ;
	}
Voilà ce que donne la compilation :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
test/test.cpp:11:4: error: request for member ‘getValue’ is ambiguous
  c.getValue( 5 ) ;
    ^
test/test.cpp:5:16: note: candidates are: int B::getValue(int)
 struct B { int getValue( int i ) { return i * 2 ; } } ;
                ^
test/test.cpp:4:16: note:                 int A::getValue()
 struct A { int getValue()  { return 33 ; } } ;
Ce n'est pas la première fois que je suis obligé de contourner le problème de la non-résolution d'un appel de méthode, par exemple en préfixant l'appel à la méthode non résolue par la classe propriétaire :

Mais ce n'est pas réellement satisfaisant ni très joli.
Sur internet je n'ai jamais trouvé de réponse, car les demandes sur ce problème portent en général sur des cas évidents.

Est-ce un bug du compilateur ou ai-je loupé quelque chose ?
Suis-je le seul à rencontrer ce problème ?
Merci