Template & Liste chaîné [C++] - C++ - Programmation
Marsh Posté le 18-06-2005 à 10:51:31
qu'est ce que tu fous avec des malloc ? t'es en C++, les malloc n'ont rien à faire ici !
Marsh Posté le 18-06-2005 à 10:53:27
Je fais un new alors??
Code :
|
Comme ca?
Marsh Posté le 18-06-2005 à 10:54:05
voila
Marsh Posté le 18-06-2005 à 10:55:44
En C++, on utilise new: debut = new T;
Rassure-moi, c'est juste à titre d'exercice que tu crées cette classe ? Tu n'as pas l'intention de l'utiliser par la suite ?
Marsh Posté le 18-06-2005 à 10:58:50
Oui oui c'est un projet débile de fin d'année. je suis obligé d'utiliser ce que j'ai vu pendant l'année. Je mélange donc C et C++... C'est un petit projet.
Marsh Posté le 18-06-2005 à 11:01:45
Mon code devien donc :
Code :
|
Marsh Posté le 18-06-2005 à 11:02:52
Tu mélanges tellement que tu t'y perds, et nous avec... Ca fait 3 fois que j'édite mon post pour la bonne syntaxe du new...
Marsh Posté le 18-06-2005 à 11:03:22
ah oui, liste est un template, j'avais pas fait gaffe. c'est donc bien liste <T> et pas liste (T). mais de toute façon, comme muchacho et moi te l'avons dit, en C++ les allocations se font avec new
Marsh Posté le 18-06-2005 à 11:06:22
Mais c'est une nouvelle liste de type T. Et non pas un nouvel objet de type T.
Donc ca ne devrait pas être comme ceci plutôt:
Code :
|
Marsh Posté le 18-06-2005 à 11:09:41
En fait, sans compilo pour essayer, je dirais qu'il faut que liste soit une classe avec un constructeur que tu initialises en appelant le new:
liste<T> *debut = new liste(T, prec, suiv);
Là, tu mélanges debut : premier élément de la liste et le type objet T.
ton malloc était faux : c'était sizeof(struct listeC) et non sizeof(T).
D'où la confusion que tout le monde a faite.
Marsh Posté le 18-06-2005 à 11:11:26
non c'est new T : tu ajoutes un élément à ta liste, pas une liste !
edit: ptain, je m'y perds les pinceaux à son truc
Marsh Posté le 18-06-2005 à 11:11:46
C'est ca en fait le gros problème.
Comment initialisé mon debut?
debut est un pointeur sur une structure :
Code :
|
la structure peut contenir un objet de type T.
Donc quand j'initialise debut je dois faire ceci :
debut = new liste;
Mais il faut focément que je précise le type que ma liste va contenir (T donc).
Comment faire ca?
debut = new liste<T>; ??
Marsh Posté le 18-06-2005 à 11:12:24
Harko > Non. Lis mon post.
Marsh Posté le 18-06-2005 à 11:15:09
Spir a écrit : C'est ca en fait le gros problème.
|
liste<T> *debut = new liste(T, 0, 0);
cf mon post précédent
Marsh Posté le 18-06-2005 à 11:18:08
Ouais mais il y a confusion entr le nom de la classe et le nom de la structure.
Ma classe s'appel Liste la structure liste.
debut est un attribut de la classe Liste.
C'est un pointent sur une structure liste.
Donc si je fais ce que tu dis :
Code :
|
ca fais spé... liste est une structure pas une classe?!
Marsh Posté le 18-06-2005 à 11:19:31
je veux dire si je fais :
Code :
|
Je dois créé un constructeur de liste??? je ne capte pas.
Marsh Posté le 18-06-2005 à 11:19:51
Ben t'en fais une classe, et tu renommes ListeC en Element, et comme ça, on arrête de tout mélanger. Parce qu'au fonds, ce que tu appelles liste * n'est qu'un élément de l'objet Liste.
Marsh Posté le 18-06-2005 à 11:21:16
C'est ps compliqué ce que je veux faire. je veux juste faire un classe template qui manipule une liste chainé.
J'ai donc en attribut la déclaration de la structure de ma liste chainé, et un pointeur debut qui pointe sur l'adresse du début de ma liste chainé.
Marsh Posté le 18-06-2005 à 11:22:11
Ben oui mais tu mélanges tout parce que tu raisonnes à la C.
Marsh Posté le 18-06-2005 à 11:22:30
Ok donc je fais un classe template ListeC qui décrit une liste chainé.
Et après je fais une classe Liste qui manipule ma liste chainé template.
Marsh Posté le 18-06-2005 à 11:24:25
J'ai trouvé quelque chose sur le net qui ressemble à ce que je veux faire :
liste.h :
Code :
|
liste.cpp
Code :
|
Marsh Posté le 18-06-2005 à 11:26:08
Déjà, fais-en une version non template qui marche...
- une classe Liste qui est celle que tu as définie
- une classe Element de la liste qui sera une sorte de wrapper du type T, définie comme ta struct ListeC, et qui n'a besoin comme méthodes qu'un constructeur et un destructeur.
Marsh Posté le 18-06-2005 à 11:27:24
Spir a écrit : J'ai trouvé quelque chose sur le net qui ressemble à ce que je veux faire :
|
C'est très exactement ce que je viens de te décrire: ici Cellule est ma classe Element.
Marsh Posté le 18-06-2005 à 11:28:27
Voilà bon bah je vais essayer de faire ca. Un classe qui décrit ma liste chainé.
Et une classe qui exploite cette liste chainé.
Marsh Posté le 27-06-2005 à 18:45:59
Juste unt truc :
el muchacho a écrit : Rassure-moi, c'est juste à titre d'exercice que tu crées cette classe ? Tu n'as pas l'intention de l'utiliser par la suite ? |
Pourquoi ? C'est mal ?
Marsh Posté le 27-06-2005 à 18:48:07
En un mot, oui. Y'a une lib standard qui fait ça très bien, et probablement mieux que tout ce que vous pourrez pondre, alors autant l'utiliser.
Marsh Posté le 18-06-2005 à 10:38:08
Hello, je suis en train de coder une template de liste chaînée. Celle ci va contenir des objets divers.
Mais je n'y arrive pas. J'ai beucoup de souci de compilation au niveau de mes malloc. Pouvez vous m'aider??
Voivi ma classe :
Dans ma classe pour l'instant j'ai donc fait :
un conctructeur
un conctructeur de recopie
une méthode permettant d'ajouter une élément dans ma liste chaîné
un accesseur qui retourne le nombre d'élément de ma liste chaîné
J'ai en attribut de classe une structure : ma liste chainé
l'adresse du début de ma liste chainé
et un entier qui correspond au nombre d'élément de ma liste chainé.
Ma liste chainé est une liste doublement chainé avec un lien vers le chainon suivant et un lien vers le chainon précédent.
C'est donc une liste chainé circulaire.
Cette ligne de code pose problème par exemple :
Je ne sais pas quoi mettre dans le malloc et dans le typage :
struct liste * ou T?
struct liste * parait le plus évident. Mais je dois surement fournir aussi le type de liste? enfin je veux dire le type de l'élément de ma liste non?
C'est un peu compliqué...
Aidez moi s'il vous plait