Liste chainée générique (template) [résolu] [C++] - C++ - Programmation
Marsh Posté le 10-04-2002 à 21:22:20
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
Marsh Posté le 10-04-2002 à 22:13:22
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 :
|
Marsh Posté le 10-04-2002 à 23:31:48
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.....
Marsh Posté le 11-04-2002 à 05:44:43
Verdoux a écrit a écrit : std::list<T> |
[jfdsdjhfuetppo]--Message édité par gilou--[/jfdsdjhfuetppo]
Marsh Posté le 11-04-2002 à 12:25:01
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.
Marsh Posté le 11-04-2002 à 13:25:32
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
Marsh Posté le 11-04-2002 à 13:46:13
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 en quoi ca implique que le code doive se trouver dans le .h ???
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]
Marsh Posté le 11-04-2002 à 13:57:15
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
Marsh Posté le 11-04-2002 à 14:07:02
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é ?
Marsh Posté le 11-04-2002 à 17:22:27
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
Marsh Posté le 11-04-2002 à 18:26:58
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
Marsh Posté le 10-04-2002 à 20:53:52
Kkun peut me dire pourquoi j'ai des erreurs lors de l'édition des liens ?
Parce que là je cale complet...
[jfdsdjhfuetppo]--Message édité par zeux--[/jfdsdjhfuetppo]
---------------
Guerre Dollar - Euro : la chute economique des Etats-Unis avant 2010.