Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2229 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [C++] Map statique dans une classe

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C++] Map statique dans une classe

n°1941618
Raziel
Noel sfini
Posté le 17-11-2009 à 15:40:08  profilanswer
 

Bonjour,
 
Je voudrais utiliser une map statique dans une classe, servant de pointeur sur fonction. Seulement je n'arrive pas à l'initialiser ou à l'utiliser.
J'ai fait ceci:
 

Code :
  1. //Toto.hpp
  2. typedef void(Toto::*cmd)(std::string);
  3. static std::map<std::string, cmd>     cmds;
  4. //Toto.cpp
  5. //Dans le constructeur
  6. if (cmds.empty())
  7. {
  8.   cmds["test"] = &Toto::fonction;
  9. }


 
Il ne se plaint pas lors de la compilation, par contre lors du linkage je me tape des erreurs de ce type:

Citation :

Toto.o: In function `Toto::Toto(boost::asio::io_service& )':
Toto.cpp:(.text+0x1807): undefined reference to `Toto::cmds'
Toto.cpp:(.text+0x1847): undefined reference to `Toto::cmds'


 
Je ne sais pas si la méthode est très propre mais ça m'étonne que je ne puisse même pas accéder à la variable, j'ai oublié quelque chose?


Message édité par Raziel le 17-11-2009 à 15:41:07
mood
Publicité
Posté le 17-11-2009 à 15:40:08  profilanswer
 

n°1941619
theshockwa​ve
I work at a firm named Koslow
Posté le 17-11-2009 à 15:43:45  profilanswer
 

les statiques que tu déclares dans une classe doivent être initialisées (dans ton cpp)


---------------
last.fm
n°1941620
Joel F
Real men use unique_ptr
Posté le 17-11-2009 à 15:46:57  profilanswer
 

et si je pêut me permetre les pointeurs de fonctions c'ets tres 1880. boost::function ets plus mieux :/

n°1941644
theshockwa​ve
I work at a firm named Koslow
Posté le 17-11-2009 à 16:30:11  profilanswer
 

Joel F a écrit :

et si je pêut me permetre les pointeurs de fonctions c'ets tres 1880. boost::function ets plus mieux :/


 
c'est sur que quand on a la possibilité d'avoir boost, ca doit être pas mal


---------------
last.fm
n°1941656
Raziel
Noel sfini
Posté le 17-11-2009 à 16:53:04  profilanswer
 

Hum pour l'initialisation dans le cpp, c'est bien quelque chose de ce type?

Code :
  1. //Hpp
  2. typedef std::map<std::string, cmd>    cmd_map;
  3. //Cpp
  4. Toto::cmd_map Toto::cmds(...);


 
Sinon j'ignorais l'existence de boost::function, je jetterai un oeil :jap:

n°1941662
theshockwa​ve
I work at a firm named Koslow
Posté le 17-11-2009 à 17:03:01  profilanswer
 

juste pour être plus précis sur ce que le code doit être :
 

Code :
  1. // hpp
  2. class Toto
  3. {
  4. // blah
  5.   typedef std::map<std::string, cmd> cmd_map;
  6.   static cmd_map cmds; // declaration
  7. };
  8. // cpp:
  9. Toto::cmd_map Toto::cmds( ... ); // initialisation


 
Lorsque tu déclares une statique dans une classe, tu dois séparer déclaration et initialisation. Pour les globales, tu peux faire les deux en même temps.


---------------
last.fm
n°1941665
Raziel
Noel sfini
Posté le 17-11-2009 à 17:15:57  profilanswer
 

Ouep c'est ce que j'ai fait. Par contre pour l'initialisation j'ai simplement fait

Code :
  1. //cpp
  2. Toto::cmd_map Toto::cmds;


et j'ai laissé l'ajout des éléments dans le constructeur. Mais il semble possible de les créer dès l'initialisation, c'est possible proprement si la map est statique?

 

Edit: trouvé, merci boost::assign :o


Message édité par Raziel le 17-11-2009 à 17:23:43
n°1941708
theshockwa​ve
I work at a firm named Koslow
Posté le 17-11-2009 à 18:42:57  profilanswer
 

à ce sujet, d'ailleurs, j'imagine que les listes d'initialisation de C++0x vont venir nous proposer quelque chose de standard sur les maps.


---------------
last.fm
n°1941727
Joel F
Real men use unique_ptr
Posté le 17-11-2009 à 22:01:48  profilanswer
 

pas sur. Je cherche le proposal mais je le trouve pas
http://en.wikipedia.org/wiki/C%2B% [...] izer_lists


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [C++] Map statique dans une classe

 

Sujets relatifs
addition de caracteres en C ...[Architecture] Utiliser une classe en dev / test et une autre en prod
[C] [resolu] lecture matrice alloué dynamiquement{C++} Tableau de structure
[C/C++] Coût d'une allocation mémoire[C#] Héritage de Template (généric)
programmation wifi linux en CNotation romaine décroissante en langage C
[C#] HttpWebRequest + accentInterop C# - Java via Com4j
Plus de sujets relatifs à : [C++] Map statique dans une classe


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR