Bonsoir à tous,
J'ai un ch'tit problème, qui m'enquiquine plutot.
class String
{
int bidule;
};
template<class Index, class T_Object>
class Map
{
public:
bool isIndex(const Index& index) const;
};
template<class T_Object>
class StringMap : public Map<String, T_Object>
{
public:
bool isIndex(const char* index) const;
};
int main()
{
StringMap<int> map;
String str;
map.isIndex(str);
return 0;
}
Ce code provoque des erreurs de compilations :
- sous GCC :
test2.cxx: In function `int main()':
test2.cxx:24: error: no matching function for call to `StringMap<int>::isIndex(String&)' test2.cxx:17: note: candidates are: bool StringMap<T_Object>::isIndex(const char*) const [with T_Object = int]
-sous Visual Studio C++:
test2.cxx
test2.cxx(24) : error C2664: 'StringMap<T_Object>::isIndex' : impossible de conv
ertir le paramètre 1 de 'String' en 'const char *'
with
[
T_Object=int
]
Aucun opérateur de conversion définie par l'utilisateur disponible qui puisse effectuer cette conversion, ou l'opérateur ne peut pas être appelé
Donc, en gros, la méthode défini dans ma classe mère isIndex(const String) const, n'est pas "vue" depuis la classe fille. Et là, j'avoue que je sèche complètement sur le pourquoi du comment. Sans doute lié à l'utilisation des templates, mais c'est bien la première fois que j'ai cette erreur ! Et pourtant, j'en use des templares
Et je ne pense pas que cela soi du à un bug du compilateur, puisque 2 compilateurs différents m'indiquent la même erreur.
Des idées pour résoudre ce problème ?
Merci !
Gates gave you the windows.
GNU gave us the whole house.(Alexandrin)