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

  FORUM HardWare.fr
  Programmation
  C++

  [C++] Liste chainée générique (template) [résolu]

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C++] Liste chainée générique (template) [résolu]

n°124457
Zeux
Mac user, comme Bayrou :o
Posté le 10-04-2002 à 20:53:52  profilanswer
 

Kkun peut me dire pourquoi j'ai des erreurs lors de l'édition des liens ?
 
Parce que là je cale complet...
 

Code :
  1. #ifndef LISTECHAINEE_H
  2. #define LISTECHAINEE_H
  3. #include <iostream.h>
  4. #include "String.h"
  5. template <class T>
  6. class ListeChainee {
  7. private:
  8. class Noeud {
  9. public:
  10.  T* m_pE;
  11.  Noeud* m_pSuiv;
  12. };
  13. Noeud* m_pTete;
  14. public:
  15. // Constructeurs / Destructeur
  16. ListeChainee();
  17. ListeChainee(T&);
  18. ListeChainee(ListeChainee<T>&);
  19. ~ListeChainee();
  20. // Primitives liste chainée
  21. void Supprimer();   // Supprime le dernier élément
  22. void Supprimer(String&); // Supprime l'élément qui porte le nom en param
  23. void Inserer(T&);   // Insère T en fin de liste
  24. void Afficher();   // Affiche tous les éléments
  25. // Fonctions
  26. int     NombreElem(); // Retourne le nombre d'éléments
  27. // Surcharge des opérateurs
  28. friend ostream& operator << (ostream&, ListeChainee<T>&);
  29. };
  30. #endif LISTECHAINEE_H
  31. ---------------------------------------
  32. #include <iostream.h>
  33. #include "ListeChainee.h"
  34. void main() {
  35. String toto("Toto" );
  36. ListeChainee<String> liste();
  37. liste.Inserer(toto);
  38. }

 

[jfdsdjhfuetppo]--Message édité par zeux--[/jfdsdjhfuetppo]


---------------
Guerre Dollar - Euro : la chute economique des Etats-Unis avant 2010.
mood
Publicité
Posté le 10-04-2002 à 20:53:52  profilanswer
 

n°124463
LeGreg
Posté le 10-04-2002 à 21:22:20  profilanswer
 

c'est quoi ton String.h c'est un truc perso?
Parce qu'il y a un fichier de la librairie
standard C qui s'appelle string.h
et un fichier de la STL qui s'appelle string
et qui definit un objet de type string (sans majuscule)
 
Sinon peux-tu faire un copier coller des messages d'erreur du compilateur?
 
LEGREG

n°124481
Zeux
Mac user, comme Bayrou :o
Posté le 10-04-2002 à 22:13:22  profilanswer
 

legreg a écrit a écrit :

c'est quoi ton String.h c'est un truc perso?
Parce qu'il y a un fichier de la librairie
standard C qui s'appelle string.h
et un fichier de la STL qui s'appelle string
et qui definit un objet de type string (sans majuscule)
 
Sinon peux-tu faire un copier coller des messages d'erreur du compilateur?
 
LEGREG  




c un truc a moi
 

Code :
  1. Linking...
  2. testListeChainee.obj : error LNK2001: unresolved external symbol "public: __thiscall ListeChainee<class String>::~ListeChainee<class String>(void)" (??1?$ListeChainee@VString@@@@QAE@XZ)
  3. testListeChainee.obj : error LNK2001: unresolved external symbol "public: __thiscall ListeChainee<class String>::ListeChainee<class String>(class String &)" (??0?$ListeChainee@VString@@@@QAE@AAVString@@@Z)
  4. Debug/ListeChainee.exe : fatal error LNK1120: 2 unresolved externals
  5. Error executing link.exe.
  6. ListeChainee.exe - 3 error(s), 0 warning(s)


---------------
Guerre Dollar - Euro : la chute economique des Etats-Unis avant 2010.
n°124487
LeGreg
Posté le 10-04-2002 à 22:23:05  profilanswer
 

il est ou le corps de tes fonctions?
 
LEGREG

n°124501
Dj_Jim
Posté le 10-04-2002 à 23:31:48  profilanswer
 

Pourkoi se faire chier a implementer des listes chainees alors ke les librairies STL le font???????????????
Si c un exo pour t cours je né rien dit.....

n°124511
verdoux
And I'm still waiting
Posté le 11-04-2002 à 00:20:53  profilanswer
 

std::list<T>

n°124521
gilou
Modérateur
Modzilla
Posté le 11-04-2002 à 05:44:43  profilanswer
 

Verdoux a écrit a écrit :

std::list<T>  




 [:virginie]  :jap:

 

[jfdsdjhfuetppo]--Message édité par gilou--[/jfdsdjhfuetppo]


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°124649
Zeux
Mac user, comme Bayrou :o
Posté le 11-04-2002 à 12:25:01  profilanswer
 

Verdoux a écrit a écrit :

std::list<T>  




c un exo pour un cours.
 
Le corps des fonctions est a mon avis inutile pour résoudre le probleme. En fait j'ai remarqué que tout marchait bien a condition de mettre tout dans le .h (prototypes + implémentation). A priori cela vient du fait que c'est une classe template. Problème résolu.


---------------
Guerre Dollar - Euro : la chute economique des Etats-Unis avant 2010.
n°124680
LeGreg
Posté le 11-04-2002 à 13:25:32  profilanswer
 

zeux a écrit a écrit :

 
Le corps des fonctions est a mon avis inutile pour résoudre le probleme. En fait j'ai remarqué que tout marchait bien a condition de mettre tout dans le .h (prototypes + implémentation).  




tu n'as donc pas du bien comprendre ma question..
Le corps des fonctions est indispensable parce qu'il s'agit
d'une classe template et donc le code n'est
genere qu'a l'instanciation.
 
LEGREG

n°124686
Zeux
Mac user, comme Bayrou :o
Posté le 11-04-2002 à 13:46:13  profilanswer
 

legreg a écrit a écrit :

 
tu n'as donc pas du bien comprendre ma question..
Le corps des fonctions est indispensable parce qu'il s'agit
d'une classe template et donc le code n'est
genere qu'a l'instanciation.
 
LEGREG  




Et alors  :heink:  en quoi ca implique que le code doive se trouver dans le .h ???  :heink:
 
Je reprends ma phrase parce qu'à priori je me suis mal exprimé. Le code des fonctions je l'ai fait, mais je pense qu'il est inutile de le mettre ici sur le forum car il est correct.
 
Néanmoins j'ai remarqué que mon problème se résolvait à partir du moment où je réunis dans le même fichier include le code des fonctions et leurs prototypes (la déclaration de la classe). Je voudrais comprendre pourquoi et surtout savoir comment faire autrement.

 

[jfdsdjhfuetppo]--Message édité par zeux--[/jfdsdjhfuetppo]


---------------
Guerre Dollar - Euro : la chute economique des Etats-Unis avant 2010.
mood
Publicité
Posté le 11-04-2002 à 13:46:13  profilanswer
 

n°124690
LeGreg
Posté le 11-04-2002 à 13:57:15  profilanswer
 

tu peux t'en passer si tu instancies explicitement
une ou plusieurs de tes classes templates
 
mais evidemment, la personne qui utilise le .h
ne pourra pas instancier ses classes templates
perso.  
ex: tu as instancie list<int>
donc le code pour list<int> existe et est compile
dans ton .obj, par contre personne ne pourra utilise
list<ma_class> puisqu'aucun code ne pourra etre genere
sans le gabarit de code.
 
instanciation de classe template = generation du code a partir du gabarit de code fourni.
 
A+
LEGREG

n°124695
Zeux
Mac user, comme Bayrou :o
Posté le 11-04-2002 à 14:07:02  profilanswer
 

legreg a écrit a écrit :

tu peux t'en passer si tu instancies explicitement
une ou plusieurs de tes classes templates
 
mais evidemment, la personne qui utilise le .h
ne pourra pas instancier ses classes templates
perso.  
ex: tu as instancie list<int>
donc le code pour list<int> existe et est compile
dans ton .obj, par contre personne ne pourra utilise
list<ma_class> puisqu'aucun code ne pourra etre genere
sans le gabarit de code.
 
instanciation de classe template = generation du code a partir du gabarit de code fourni.
 
A+
LEGREG  




Donc si je comprends bien il est impossible de creer un fichier .obj pour cette classe si on veut en conserver la réutilisabilité ?
 
Je crois avoir compris ce que tu veux dire. Cela signifie donc que si kkun veut utiliser ma classe avec son type de donnée il devra inclure tout le code de la classe template dans son propre code et donc il sera obligé d'inclure le cpp et le h. C'est pourquoi il reste deux méthodes :
- tout mettre dans .h et l'inclure
- inclure .h et .cpp
 
J'ai compris ! Merci de ton explication.
 
Y'a-t-il un moyen de créer un fichier pseudo objet qui conserve la réutilisabilité ?


---------------
Guerre Dollar - Euro : la chute economique des Etats-Unis avant 2010.
n°124817
LeGreg
Posté le 11-04-2002 à 17:22:27  profilanswer
 

Mettre tout dans le .h n'est pas trop un probleme,
c'est la solution adoptee par la STL.
 
En java il y a des conteneurs generiques,
mais ils contiennent des references
et pas des objets (tu peux faire la meme chose
en C++ via les listes de pointeurs)
 
LEGREG

n°124873
Zeux
Mac user, comme Bayrou :o
Posté le 11-04-2002 à 18:26:58  profilanswer
 

legreg a écrit a écrit :

Mettre tout dans le .h n'est pas trop un probleme,
c'est la solution adoptee par la STL.
 
En java il y a des conteneurs generiques,
mais ils contiennent des references
et pas des objets (tu peux faire la meme chose
en C++ via les listes de pointeurs)
 
LEGREG  




Merci encore pour toute ces précisions  :hello:


---------------
Guerre Dollar - Euro : la chute economique des Etats-Unis avant 2010.

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

  [C++] Liste chainée générique (template) [résolu]

 

Sujets relatifs
mettre valeur d'un Zone de liste dans une cellule ...[Webmasters] Gérez vous mème votre liste de diffusion
[XHTML & CSS] Problème avec des tableaux dans Mozilla [résolu][C] Y'a un truc qui foire dans 1 soft (problème résolu)
[oracle/sql] commande SQL pour obtenir la liste des tablesliste deroulante PB please
[JavaScript] Focus sur un élément d'une liste[DELPHI] Une liste de bon sites pour Delphi (last update 20/01/2003)
[JS] pbm d'accès à mon cookie... [résolu]C-Convertion chaine - Algo liste chaînée ordonnée -Fonction qui enlève
Plus de sujets relatifs à : [C++] Liste chainée générique (template) [résolu]


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