Bon le titre n'est pas très clair donc je m'explique :
J'ai une classe A contenant 2 fonctions foo prenant en paramètre des types incompatibles entr eux.
Lorsque je me fais une classe B dérivant de A et surchargeant une seule des 2 foo, il m'est impossible d'utiliser l'autre fonction sur un objet de type B.
Un bout de code minimal pour reproduire le problème :
Ce code me retourne l'erreur suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 class A { public: A(){} virtual ~A(){} void foo( int i ){ std::cout << "A::foo_int : " << i << std::endl; } virtual void foo( std::string const & coin ){ std::cout << "A::foo_str : " << coin << std::endl; } }; class B : public A { public: B(){} virtual ~B(){} virtual void foo( std::string const & coin ){ std::cout << "B::foo_str : " << coin << std::endl; } }; int main(void) { B myB; myB.foo( 1 ); return EXIT_SUCCESS; }
Je compile sous Visual Studio 2010.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 1>Coin.cpp(102): error C2664: 'B::foo'*: impossible de convertir le paramètre 1 de 'int' en 'const std::string &' 1> Raison*: impossible de convertir de 'int' en 'const std::string' 1> Aucun constructeur n'a pu prendre le type de source, ou la résolution de la surcharge du constructeur était ambiguë
Ma question : Je suppose que c'est normal, mais pourquoi ?
Partager