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

  FORUM HardWare.fr
  Programmation
  C++

  Class template et membre static

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Class template et membre static

n°1662418
styl26
Posté le 22-12-2007 à 19:01:19  profilanswer
 

Bonjour à tous, voilou j'ai un petit problème en utilisant des class template, j'aimerais avoir un membre statique "static int" mais je me bouffe a chaque fois l'erreur LNK2001.
Le but de ma classe est de me fournir une liste et de pouvoir l'utiliser sans avoir à créer un index d'itération pour me déplacer dedans. L'index est directement inclus dans la liste et ce nomme thisCell (c'est enfaite un peu le mot clé "this" ).
Voici mon code :
 

Code :
  1. template<class element> class list
  2. {
  3. private :
  4.  element info;
  5.  list* thisCell;
  6.  list* nextCell;
  7.  list* previousCell;
  8.  static int numElement;
  9. public :
  10.      list();
  11.      ~list();
  12.  inline element get();
  13.  inline void  next();
  14.  inline void  previous();
  15.  inline void  first();
  16.  inline void  last();
  17.  inline bool  isEmpty();
  18.  inline HRESULT insert(const element& );
  19.  inline HRESULT remove();
  20.  inline HRESULT destroy();
  21. };
  22. template<class element> inline list<element>::list()
  23. {
  24. info = NULL;
  25. thisCell = NULL;
  26. previousCell = NULL;
  27. nextCell = NULL;
  28. numElement++;
  29. }
  30. template<class element> inline list<element>::~list()
  31. {
  32. numElement--;
  33. }


 
Dans le main j'ai juste l'initialisation d'une liste : list<int> LEntier;
Et quand je n'utilise pas de membres statiques pas de problèmes donc la classe est bien implémentée pas de problèmes d'inclusion de .hpp
 
Voila l'erreur de link :
Linking...
testoutils.obj : error LNK2001: unresolved external symbol "private: static int list<int>::numElement" (?numElement@?$list@H@@0HA)
C:\*****\testoutils\Debug\testoutils.exe : fatal error LNK1120: 1 unresolved externals


Message édité par styl26 le 22-12-2007 à 19:11:33
mood
Publicité
Posté le 22-12-2007 à 19:01:19  profilanswer
 

n°1662426
Joel F
Real men use unique_ptr
Posté le 22-12-2007 à 19:14:18  profilanswer
 

au cul de ton .h ou y a ton tempalte, tu mets :
 

Code :
  1. template<class T> int list<T>::numElements = 0;

n°1662431
styl26
Posté le 22-12-2007 à 19:20:00  profilanswer
 

Sa marche merci ^^

n°1662432
Joel F
Real men use unique_ptr
Posté le 22-12-2007 à 19:20:45  profilanswer
 

j'ai mis 0 par deduction, évidemment tu y mets la valeur qui faut ^^

n°1662435
styl26
Posté le 22-12-2007 à 19:28:43  profilanswer
 

Question qui n'a pas vraiment avoir, est-il possible de différencier NULL à 0 comme en PHP ou l'on peut utiliser l'opérateur === ?
Paceque sinon j'ai un problème quand ma liste est vide pour savoir si la valeur est un 0 ou si c'est un pointeur vers null :/


Message édité par styl26 le 22-12-2007 à 19:31:51
n°1662437
KangOl
Profil : pointeur
Posté le 22-12-2007 à 19:32:43  profilanswer
 

boost::optional<>


Message édité par KangOl le 22-12-2007 à 19:32:53
n°1662439
styl26
Posté le 22-12-2007 à 19:37:47  profilanswer
 

Peux-tu être plus precis s'il te plait :D

n°1662440
styl26
Posté le 22-12-2007 à 19:40:21  profilanswer
 

Il vaut peut etre mieux que je rajoute une donnée membre pour savoir si la cellule possède un élement ou non qu'une nouvelle classe non ?
Merci pour vos réponses ^^
Ou non mieux je créé une fausse cellule au debut tient :p
Sa coutera beaucoup moins en mémoire.


Message édité par styl26 le 22-12-2007 à 19:41:52
n°1662441
Joel F
Real men use unique_ptr
Posté le 22-12-2007 à 19:42:54  profilanswer
 

juste une question, t'es sur que std::list serait pas genre deja 10x mieux que ta tambouille ?

n°1662442
styl26
Posté le 22-12-2007 à 19:53:08  profilanswer
 

Pas pour ce que je veux faire enfaite.
Je veux simplement une liste sans itérateur visible, en somme qu'à l'utilisation sa donne ça :

Code :
  1. list<int> LEntier;
  2. // Liste vide
  3. LEntier.insert(5);
  4. // 5
  5. LEntier.insert(7);
  6. // 5 7
  7. LEntier.previous();
  8. LEntier.insert(3);
  9. // 5 3 7
  10. LEntier.previous();
  11. LEntier.remove();
  12. // 3 7
  13. LEntier.destroy()
  14. // Liste vide


Il me semble pas que sa soit faisable avec la STL, si ?


Message édité par styl26 le 22-12-2007 à 19:53:26
mood
Publicité
Posté le 22-12-2007 à 19:53:08  profilanswer
 

n°1662501
Taz
bisounours-codeur
Posté le 23-12-2007 à 00:26:18  profilanswer
 

ça se fait facilement et sans static

n°1662699
styl26
Posté le 23-12-2007 à 22:37:06  profilanswer
 

J'ai enlevé les statics finalement mais maintenant je sais comment résoudre ce type d'erreur merci ;)


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

  Class template et membre static

 

Sujets relatifs
[résolu] Eclipse me crée des classes en ...$1.class[Resolu] Condition pour changer une class
envoi d'une classCréer une zone membre et zones de commentaires
[résolu] Action script pour un graphique + class onEnterFrameProblème de class et d'attribut
De java à class ? Quelle démarche ?[PHP][resolu] appel de fonction avec nom généré dynamiquement
Pointeur fonction membreProblème avec un static
Plus de sujets relatifs à : Class template et membre static


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)