Bonjour à tous,
Je viens ici car depuis une semaine environ je bute sur un problème que je n'arrive pas à résoudre.
Je dois utiliser la classe hash_map mais dont les paramètres templates sont des pointeurs. Lorsque j'utilise l'opérateur[], je me fais insulter par le compilateur qui refuse les pointeurs (enfin je crois).
Voici le code:
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 int main(int argc, char *argv[]) { hash<char*,int*> tab; char c; tab[&c]; } template <typename K, typename T> class hash : __gnu_cxx::hash_map<K*,T*> { public: T* operator[] (K k) { this->__gnu_cxx::hash_map<K*,T*>::operator[](k); } };
Je reçois le message suivant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 no matching function for call to `hash<char*, int*>::operator[](char*&)' candidates are: _Tp& __gnu_cxx::hash_map<_Key, _Tp, _HashFcn, _EqualKey, _Alloc>::operator[](const typename __gnu_cxx::hashtable<std::pair<const _Key, _Tp>, _Key, _HashFcn, std::_Select1st<std::pair<const _Key, _Tp> >, _EqualKey, _Alloc>::key_type&) [with _Key = char**, _Tp = int**, _HashFcn = __gnu_cxx::hash<char**>, _EqualKey = std::equal_to<char**>, _Alloc = std::allocator<int**>]
J'ai essayé des tas de combinaisons différentes, la seule qui fonctionne est de déclarer ma classe ainsi :class hash : __gnu_cxx::hash_map<K,T>
Le problème est que je ne peux pas faire cela car je dois remplacer une lib dans un programme en étant complètement transparent. Ce programme utilisait un STL payante qui utilisait des hash_map avec des paramètres template à pointeurs. Je reçois d'autres messages d'erreurs similaires lorsque j'utilise des itérateurs (pas d'opérateur=, pas d'opérateur!=, ...).
Je suis complètement perdu, plus j'essaye et plus j'ai l'impression de faire n'importe quoi.... Quelqu'un de fort en c++ pourrait-il m'aider?
Merci beaucoup!
Partager