Liste chaînée, suite des problemes :D [C++ débutant] - C++ - Programmation
Marsh Posté le 11-02-2006 à 19:47:55
ReplyMarsh Posté le 12-02-2006 à 16:09:43
ReplyMarsh Posté le 12-02-2006 à 17:08:06
Ok donc comme sa je ne vois pas en revanche je trouve sa dommage de créer une méthode pour si peu.
Je pense que aurais du mettre "nbElements" static, puis faire un inline Liste::incNbElements().
Sinon peux tu donner l'erreur exacte du compilateur (ou du linker dailleurs) :?:
Marsh Posté le 12-02-2006 à 17:13:19
Liste::incNbElements' : illegal call of non-static member function
Chrisbk- m'avait dit qu'il fallait que incNbElements ait un parametre lui indiquant de quelle liste il s'agit. Mais si c'est une méthode de classe, ça se réfere a l'objet courant, non ? Pourquoi ça marche avec getNbElements() alors ?
Marsh Posté le 12-02-2006 à 17:18:02
Citation : Liste::incNbElements(); // ------------> C'est ici que ça foire ! Voir plus bas |
Ca serait pas plutot liste->incNbElements(); qui aurait un sens dans le contexte de ton appel?
A+,
Marsh Posté le 12-02-2006 à 17:20:16
Ouai en faite c'est normal que sa ne fonctionne pas.
Quand tu fait sa tu t'adresse à quelle liste ? (quel objet ?)
Code :
|
C'est exactement ce que te dit le compilateur qu'il ne s'agit pas d'une méthode statique.
Par conséquent tu as cette méthode dans chaque objet (c'est pour sa que je te disais que le inline est préférrable dans ton cas, pour éviter de mettre cette méthode dans chaque objet).
Par conséquent tu ne pas utiliser cette méthode comme sa, il te faut une référence.
Marsh Posté le 12-02-2006 à 17:22:11
gilou a écrit :
|
lol
+1
Mais à mon avis le plus simple est de mettre ton nombre d'élément "static", et de faire un inline comme assesseur.
Pour ce qui est du type générique la seule solution c'est de passer par les templates à mon sens.
Bon courrage.
Marsh Posté le 12-02-2006 à 17:27:27
gilou a écrit :
|
En faite dans l'hypotèse où "liste" est une référence (handle), sa donnerait plutôt sa :
liste.incNbElements();
Marsh Posté le 12-02-2006 à 17:28:18
Il n'y a aucune raison de mettre le nb d'élements en static ici.
Ca reviendrait a partager entre tous les listes de la classe Liste la variable nb d'élements, non? bonjour les dégats...
A+,
Marsh Posté le 12-02-2006 à 17:33:38
Merci je vais tenter ... mais comment m'expliquez-vous que ça fonctionne sur l'instance en cours avec "getNbElements()" ?
Marsh Posté le 12-02-2006 à 17:34:51
gilou a écrit : Il n'y a aucune raison de mettre le nb d'élements en static ici. |
C'est très vrais, j'ai craqué
désolé.
Marsh Posté le 12-02-2006 à 17:36:13
ParadoX a écrit : Merci je vais tenter ... mais comment m'expliquez-vous que ça fonctionne sur l'instance en cours avec "getNbElements()" ? |
Bin je ne sais pas dans quel contexte tu l'utilises ?
Parce que je ne vois où tu l'utilises dans ton code.
Marsh Posté le 12-02-2006 à 17:47:40
C'est bon j'ai tout compris, et ça marche. Mercii beacoup, je reviens incessamment sous peu pour d'autres questions ^^
Marsh Posté le 14-02-2006 à 13:56:23
Bien
Maintenant que ma liste de INT marche, j'ai voulu remplacer les INT par des Objets de ma classe Objet que voici: (très sommaire pour l'instant, je la développerai quand la liste fonctionnera avec)
Code :
|
J'ai remplacé toutes les occurences de "int" avec "Objet" dans les données membres de ma liste ainsi que dans les méthodes. Mais déja dans le .h le compilateur gueule:
Code :
|
Erreur à la ligne 19:
use of undefined type 'Objet'
Pourtant je l'ai mis en classe Friend ... pourquoi refuse-t-il ?
Marsh Posté le 14-02-2006 à 14:18:32
ça, jlai compris moi-même
Mais pourquoi ? Où faut-il que je lui précise en plus ? La classe est en Friend !
Marsh Posté le 14-02-2006 à 14:20:14
mais y s'en fout qu'elle soit en friend. Il ne connait pas object. Tu demandes une instantation statique de Object. Donc pour cela il doit savoir ce qu'est objet (un typedef ? une classe ? une structure ? ) et de quoi object est fait
donc tu fais #include "objet.h" au dessus de ta liste
Marsh Posté le 14-02-2006 à 14:24:26
(d'ailleurs je vois pas trop pkoi tu veux mettre Objet en friend)
Marsh Posté le 14-02-2006 à 16:12:30
J'ai changé la class friend en fonction friend, dans mon mail j'ai un print qui tape direct dans les données private de l'objet, alors j'en avais besoin. Tout fonctionne maintenant, merci à tous
Marsh Posté le 14-02-2006 à 16:22:24
ParadoX a écrit : J'ai changé la class friend en fonction friend, dans mon mail j'ai un print qui tape direct dans les données private de l'objet, alors j'en avais besoin. Tout fonctionne maintenant, merci à tous |
ca craint un peu de l'arriere train ca
Marsh Posté le 14-02-2006 à 16:23:45
Comment je fais afficher le contenue d'une liste alors ?
La fonction print est en const, ou est le danger ?
Marsh Posté le 14-02-2006 à 16:28:12
ReplyMarsh Posté le 14-02-2006 à 16:30:43
Ok je vais tenter, merci.
Mais sinon, ya rien de "mal" à faire comme j'ai fait, enfin ça marche très bien.. Une foncion const est la pour ça, non ? C'est juste que ça ne correspond pas aux "standards" des programmeurs C++, ou ce n'est pas très orienté objet ?
Marsh Posté le 14-02-2006 à 16:34:01
bin tu court circuites pas mal de truc avec tes friends, c'est un peu con d'autant plus que c'est inutile
Marsh Posté le 14-02-2006 à 16:44:45
Ah jme rappelle pkoi j'avais fait comme ça ...
pour le print, je place un iterateur sur une liste ( Iterateur(Liste & ); ) qui va parcourir la liste ... maintenant, si je déclare le print dans liste.cpp, je dois initialiser un iterateur sur la liste courante Il n'accepte pas "this" !
cannot convert parameter 1 from 'const class Liste *const ' to 'class Liste &'
Marsh Posté le 14-02-2006 à 16:48:20
jpige pas tout jsuppose que ton iterateur n'accepte pas de cost Liste *, et que vu que ton print est en const ca pete la
Marsh Posté le 14-02-2006 à 17:25:32
chrisbk a écrit : ta liste apelle objet.print() qui lui se charge de s'afficher |
Ou il pourrait faire une méthode string toString()
Marsh Posté le 14-02-2006 à 17:28:46
Pourtant je trouve cela plus intéressant, notamment à des fins de debuggage.
Marsh Posté le 11-02-2006 à 16:33:07
Bonjour,
Dans le cadre d'un projet C++ pour la Fac, j'ai besoin de manipuler une Liste chainée d'objets. Pour commencer, je me suis dit que je vais tester avec une liste chaînée de Int avant d'attaquer de suite avec les objets.
Mes classes:
liste.h
iterateur.h
liste.cpp: (inachevé)
et iterateur.cpp:
Problème:
Je ne comprends pas pourquoi celui-ci ne va pas:
C'est un peu comme une méthode Get/Set: Elle devrait avoir accès au nbElements de la liste courante, qui lui est une donnée membre de la classe Liste.
Pour le int getNbElements() const; , je fais bien référence à nbElements (sans le modifier, bien entendu), et il me retourne bien celui de la liste courante
Message édité par ParadoX le 11-02-2006 à 16:34:38
---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt