Class template et membre static

Class template et membre static - C++ - Programmation

Marsh Posté le 22-12-2007 à 19:01:19    

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
Reply

Marsh Posté le 22-12-2007 à 19:01:19   

Reply

Marsh Posté le 22-12-2007 à 19:14:18    

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

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

Reply

Marsh Posté le 22-12-2007 à 19:20:00    

Sa marche merci ^^

Reply

Marsh Posté le 22-12-2007 à 19:20:45    

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

Reply

Marsh Posté le 22-12-2007 à 19:28:43    

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
Reply

Marsh Posté le 22-12-2007 à 19:32:43    

boost::optional<>


Message édité par KangOl le 22-12-2007 à 19:32:53
Reply

Marsh Posté le 22-12-2007 à 19:37:47    

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

Reply

Marsh Posté le 22-12-2007 à 19:40:21    

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
Reply

Marsh Posté le 22-12-2007 à 19:42:54    

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

Reply

Marsh Posté le 22-12-2007 à 19:53:08    

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
Reply

Marsh Posté le 22-12-2007 à 19:53:08   

Reply

Marsh Posté le 23-12-2007 à 00:26:18    

ça se fait facilement et sans static

Reply

Marsh Posté le 23-12-2007 à 22:37:06    

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

Reply

Sujets relatifs:

Leave a Replay

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