[VC++] map, struct et const & : pb d'insertion d'elts

map, struct et const & : pb d'insertion d'elts [VC++] - C++ - Programmation

Marsh Posté le 27-03-2003 à 17:42:10    

j'ai le pb suivant : j'ai une struct avec dedans un "const HBITMAP&", et une table de hash ayant pour élément cette struct (et comme clé un UINT).
 
Le pb est que l'insertion d'un élément pose un pb chelou (erreur impossible a copier, trop longue).
 
voici en gros le code :
 

Code :
  1. typedef struct s_Button
  2. {
  3. s_Button(const HBITMAP &hBit) : State(_State::normal), hBitmap(hBit) {}
  4. s_Button(const struct s_Button& button) : State(button.State), hBitmap(button.hBitmap) {}
  5. _State State;
  6. const HBITMAP &hBitmap;
  7. } t_Button;
  8. typedef map<UINT, t_Button> BMap;
  9. BMap m_Buttons;


Et la ligne qui genere l'erreur :

Code :
  1. t_Button tmp(hBitmap);
  2. m_Buttons.insert(tmp);


 
c'est clair que c'est le 'const HBITMAP&' qui pose probleme, alors bien sur je pourrais m'en passer (par ex mettre un pointeur a la place), mais ca serait décevant.
 
en gros, si qqun pouvait me dire 'ca a pas de sens ce que t'as fait, pasque..." ou bien alors ou est l'erreur.
 
merci...


Message édité par Konar le 27-03-2003 à 17:43:03
Reply

Marsh Posté le 27-03-2003 à 17:42:10   

Reply

Marsh Posté le 27-03-2003 à 17:50:08    

si tu veux utiliser insert, faut insérer une paire, genre
 

Code :
  1. m_Buttons.insert(make_pair (key, tmp));


 
ou aussi
 

Code :
  1. m_Buttons[key] = tmp;


qui fait une insertion si il n'y a pas de clé key ou le modifie sinon

Reply

Marsh Posté le 27-03-2003 à 17:58:01    

gloop a écrit :


Code :
  1. m_Buttons[key] = tmp;


qui fait une insertion si il n'y a pas de clé key ou le modifie sinon


 
ok pour le insert, je devais rater fort...
 
je connaissais l'autre solution, mais ca génére une autre erreur, qui doit provenir du meme probleme...

Reply

Marsh Posté le 27-03-2003 à 18:05:31    

Konar a écrit :


 
ok pour le insert, je devais rater fort...
 
je connaissais l'autre solution, mais ca génére une autre erreur, qui doit provenir du meme probleme...


c'est normal que l'utilisation de [] provoque une erreur, il a besoin d'un constructeur par défaut. Le comportement de l'opérateur est soit de retourner la valeur associée à la clé si elle existe, soit de créer une nouvelle entrée avec comme valeur mappée la valeur par défaut du type. Ensuite, si tu mets ca en lvalue, l'affectation sera faite. Comme t'as pas de constructeur par défaut, il gueule

Reply

Marsh Posté le 27-03-2003 à 18:06:10    

sinon, c'est quoi l'erreur qu'il te balance, parce que la  :??:  

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed