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 :

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 ;
 
};
Tout se passe bien, pour résumer c'est donc une table indexée par des strings et contenant des structures (numéro, string).

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.

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 ) ) ;
Mais ca me lance une erreur de compil que je n'arrive pas à comprendre :

\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 :
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
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.
Il manque un operator () à ma structure Dictionnary ?

Merci encore, a bientot.

Alexandre.