Bonjour tout le monde, j'ai un souci purement technique.
Je créé une table de hachage dans une classe de gestion de dictionnaire, comme ceci :
Tout se passe bien, pour résumer c'est donc une table indexée par des strings et contenant des structures (numéro, string).
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
28
29
30
31
32
33 class TDictionnary { struct Key_Equality : public stdext::hash_compare< std::string > { bool operator()( const std::string& par_ro_string1, const std::string& par_ro_string2 ) { return par_ro_string1 < par_ro_string2 ; } }; struct Dictionnary { unsigned long ul_number ; std::string o_def ; }; typedef stdext::hash_map < std::string, Dictionnary, Key_Equality > HASH_MAP_DIC ; typedef std::pair < std::string, Dictionnary > HASH_MAP_ELT_DIC ; public : // mes fonctions etc. private : // The stored dictionnary HASH_MAP_DIC m_o_dictionnary ; };
Maintenant, dans mon parser, je veux simplement insérer un élément dans la table, avec :
loc_o_word : un mot parsé, de type std::string
loc_o_definition : une definition parsée, de type std::string.
Mais ca me lance une erreur de compil que je n'arrive pas à comprendre :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 // On crée l'element a inserer : TDictionnary::Dictionnary loc_o_dictionnary_definition = { 0U, loc_o_definition } ; // On insere : loc_o_dictionnary.m_o_dictionnary.insert( TDictionnary::HASH_MAP_ELT_DIC( loc_o_word, loc_o_dictionnary_definition ) ) ;
\programmation\visual studio 8\vc\include\xhash(314) error C2064: le terme ne correspond pas à une fonction qui prend 1 arguments
la classe ne définit pas un 'operator()' ou un opérateur de conversion défini par l'utilisateur en pointeur de fonction ou référence de fonction qui accepte le nombre d'arguments approprié
d:\programmation\visual studio 8\vc\include\xhash(298) : lors de la compilation de la fonction membre '<Inconnu>' de la classe <Inconnu>
Et en fait ca pète ici :
this->comp(this->_Kfn(*_Plist)) & _Mask;
de la fonction insert de xhash :
Merci d'avance pour toute aide, si quelqu'un à deja essayé d'insérer un objet qui ne soit pas un type natif dans une hash table.
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 _Pairib insert(const value_type& _Val) { // try to insert node with value _Val iterator _Plist, _Where; if (_Maxidx <= size() / bucket_size) { // too dense, need to grow hash table if (_Vec.size() - 1 <= _Maxidx) { // table full, double its size _Mask = ((_Vec.size() - 1) << 1) - 1; _Vec.resize(_Mask + 2, end()); } else if (_Mask < _Maxidx) _Mask = (_Mask << 1) + 1; size_type _Bucket = _Maxidx - (_Mask >> 1) - 1; for (_Plist = _Vec[_Bucket]; _Plist != _Vec[_Bucket + 1]; ) { // split old bucket size_type _Newbucket = this->comp(this->_Kfn(*_Plist)) & _Mask; if (_Newbucket == _Bucket) ++_Plist; // leave element in old bucket
Il manque un operator () à ma structure Dictionnary ?
Merci encore, a bientot.
Alexandre.
Partager