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

  FORUM HardWare.fr
  Programmation
  C++

  un map<> static dans une classe ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

un map<> static dans une classe ?

n°903000
lelfe
Posté le 19-11-2004 à 18:14:51  profilanswer
 

Salut
 
Je cherche désespérement à ajouter un map<string, T> à une classe qui serait un état de classe, donc un élément statique pour cet classe.
 
La classe fonctionne très bien tant que je ne le déclare pas en static.
cet élément, c'est instances.
 
Avec le static, ca passe bien à la compilation, mais le linkage merde après...
Je comprends pas du tout.
 
Si je retire la gestion des templates et que je la remplace par une classe quelconque, ca change rien. Toujours le même comportement
 
Une idée ?
 
Lelfe
 

Code :
  1. #include <iostream>
  2. #include <map>
  3. using namespace std;
  4. template <class T>
  5. class Saveable
  6. {
  7. private:
  8.  typedef std::map<string, T> HashTable;
  9.  static HashTable instances;
  10. public:
  11.  Saveable(string key);
  12.  T getInstance(string &key);
  13. };
  14. template <class T>
  15. Saveable<T>::Saveable(string key)
  16. {
  17. instances[key] = "toto";
  18. return ;
  19. }
  20. template <class T>
  21. T Saveable<T>::getInstance(string &key)
  22. {
  23. // Fetch the corresponding value for the provided key  
  24. T instance = instances[key];
  25. return instance;
  26. }
  27. int main(void) {
  28. Saveable <string> uneListe("toto" );
  29. string key;
  30. string value;
  31. cout << "Clé: ";
  32. cin >> key;
  33. value = uneListe.getInstance(key);
  34. cout << "valeur :" << value << endl;
  35. }


Message édité par lelfe le 19-11-2004 à 18:15:56
mood
Publicité
Posté le 19-11-2004 à 18:14:51  profilanswer
 

n°903002
chrisbk
-
Posté le 19-11-2004 à 18:18:41  profilanswer
 

avec un static fo faire une redecl dans le cpp, genre :
 

Code :
  1. class A
  2. {
  3. static int a;
  4. }


 
et dans le cpp:

Code :
  1. int A::a;


 
 
(et a l'avenir, please, dis pas "y'a une erreur", mais donne la

n°903004
Taz
bisounours-codeur
Posté le 19-11-2004 à 18:23:51  profilanswer
 

template <class T>
typename Saveable<T>::HashTable Saveable<T>::instances;
 
 
par contre, ça manque gavé de 'const string&' au niveau du prototype de toutes tes fonctions membres.

n°903009
Taz
bisounours-codeur
Posté le 19-11-2004 à 18:30:33  profilanswer
 

chrisbk a écrit :

avec un static fo faire une redecl  

non. On déclare dans la déclaration de classe, puis il faut une définition

n°903010
chrisbk
-
Posté le 19-11-2004 à 18:31:18  profilanswer
 

oué, bon.

n°903017
lelfe
Posté le 19-11-2004 à 18:40:37  profilanswer
 

chrisbk a écrit :


(et a l'avenir, please, dis pas "y'a une erreur", mais donne la


 
Oui, c'est vrai autant pour moi. J'ai posté trop vite.
Mais bon, là, je pense pas que le problème soit très compliqué, ca doit être assez classique :).

n°903064
Taz
bisounours-codeur
Posté le 19-11-2004 à 19:36:51  profilanswer
 

lelfe a écrit :

Oui, c'est vrai autant pour moi. J'ai posté trop vite.
Mais bon, là, je pense pas que le problème soit très compliqué, ca doit être assez classique :).

parce qu'en plus tu sais pas lire ?

n°903073
chrisbk
-
Posté le 19-11-2004 à 19:49:08  profilanswer
 

Taz a écrit :

parce qu'en plus tu sais pas lire ?


 
mais franchement taz, si c'est juste pour sortir de la merde comme ca, ferme la

n°903075
Taz
bisounours-codeur
Posté le 19-11-2004 à 19:50:48  profilanswer
 

bah je comprends, sa réponse. T'as filé l'explication, et moi le code ad-hoc. Moi je comprends 'ça serait sympa si vous aviez la solution, je pense pas que ça doit être compliqué, c'est certainement un problème classique' ...

n°903078
chrisbk
-
Posté le 19-11-2004 à 19:54:12  profilanswer
 

moi j'ai compris ca comme "bah ca m'avait l'air classique, spourca que j'avions point filé el indicazione del linker"

mood
Publicité
Posté le 19-11-2004 à 19:54:12  profilanswer
 

n°903079
Taz
bisounours-codeur
Posté le 19-11-2004 à 19:56:14  profilanswer
 

bah il a utilisé le présent :/

n°903160
lelfe
Posté le 19-11-2004 à 20:32:52  profilanswer
 

chrisbk a écrit :

moi j'ai compris ca comme "bah ca m'avait l'air classique, spourca que j'avions point filé el indicazione del linker"


 
En effet, c'était le cas :).
J'ai utilisé le présent, car je pense que ce genre d'erreur est assez classique et le sera encore. C'est une erreur que les débutants doivent faire régulièrement.
 
De plus, je comptais poster un second post car j'ai pas très bien compris comment s'utilisait le code gracieusement fourni, mais je vis ma vie aussi, et je n'ai pas pu le faire tout de suite, donc ce post a été mon unique réponse. Je trouve ca dommage que je sois obligé de me justifier comme ca.  
Donc, calmez vous les gars, y'a pas besoin de s'énerver pour ca, c'est le WE :)
 
Bon, je continue de chercher comment on utilise ca, mais c'est pas gagné :)
 
Lelfe

n°903163
Taz
bisounours-codeur
Posté le 19-11-2004 à 20:37:13  profilanswer
 

c'est pas vraiment une erreur, c'est une incompréhension de la dissociation entre déclaration et définition.
 
Mais là je crois que chrisbk sera d'accord avec moi : tu cherches quoi ailleurs ? qu'est-ce que t'as pas compris ?


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

  un map<> static dans une classe ?

 

Sujets relatifs
help classe auto référentielle ( chainage d'objets )classe HashMap avec jsp
probleme de classe[Java] Problème de conception d'une classe GraphMap
Problème avec la classe vectortool pour convertir une classe VB6 en VB.NET ( surtout le Property)
Modif classe d'un élément HTML[C#] Garder une référence vers une variable d'une autre classe ?
[C++] Accès propriété "static" d'une classe et linker errorDeclarer un tableau en static dans une classe
Plus de sujets relatifs à : un map<> static dans une classe ?


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