Probleme de classe en c++ (DEBUTANT) - C++ - Programmation
Marsh Posté le 22-11-2009 à 13:40:51
D'accord,
Dans le main il n'y a rien, si ce n'est une fonction d'affichage. Le probleme se situe uniquement entre la liste et les corps.
Voici les fichiers :
Liste.cpp :
|
Liste.h
Code :
|
Corps.cpp
Code :
|
Corps.h
Code :
|
Coord est juste une structure contenant deux float x et y .
Merci d'avance,
Marsh Posté le 22-11-2009 à 15:09:51
* une liste c'est pas un pointeur, utilise std::vector ou std::list
* c'est quoi c'est fonction new_corps ? Tu n'as pas entendu aprlé de la notion de constructeur ? Mieux, si c'est des structures sans plus, tu peut utiliser l'initialisation par aggregation.
* Conceptuellement acceder au nieme element d'une liste c'ets bancal. Une liste ca a une tete et une queue, point.
Voila une version qui marche avec heritage privé sur vector:
http://codepad.org/6GRzUXZl
Une version avec composition simple:
http://codepad.org/AwgXZz36
la doc de std::vector :
http://www.cplusplus.com/reference/stl/vector/
Le pourquoi de l'heritage privé :
http://www.parashift.com/c++-faq-l [...] tance.html
Revois aussi ta notion de reference et de const :
http://www.parashift.com/c++-faq-lite/references.html
http://www.parashift.com/c++-faq-l [...] tness.html
Marsh Posté le 22-11-2009 à 15:20:22
J'ai un projet a faire avec contraintes de créer une classe liste. Je ne peut pas utiliser les armes lourdes que tu me cites ...
En tout cas, je garde le code que tu m'as fais ainsi que les adresses pour aller plus loin une fois que j'aurai rendu ce fichu projet ! merci.
Par contre, j'ai du mal à comprendre ta remarque : une liste c'est pas un pointeur. Ou est ce que tu as vu dans le code que je pensais ca ? Je parlais plutot de tableau de pointeurs, non ?
Pour l'instant, mon objectif premier est d'arranger cette fonction :corps* get(int p)
qui me donne donc cette erreur au niveau de la descritption de la methode :
error: no match for ‘operator*’ in ‘**(((Liste*)this)->Liste::liste + ((unsigned int)(((unsigned int)p) * 28u)))’
Merci d'avance,
berse`
Marsh Posté le 22-11-2009 à 15:39:08
berserendo a écrit : J'ai un projet a faire avec contraintes de créer une classe liste. Je ne peut pas utiliser les armes lourdes que tu me cites |
Encore une formation de qualité tiens
Ton [] doit etre dedoubler : un const et un non const qui renvoit une reference.
Ensuite, montre comment tu appelles ton [] dans ton main
Marsh Posté le 22-11-2009 à 15:48:45
Ton [] doit etre dedoubler : un const et un non const qui renvoit une reference.
Je ne sais pas exactement comment me servir de const, cela dit, j'ai compris que tu voulais que je fasse ca :
Dans le liste.h :
Code :
|
Dans le liste.cpp
Code :
|
C'est bien ca ?
Au sinon voila l'appel que je compte faire :
dessineCercle(listecorps[j]->position.x,listecorps[j]->position.y)
avec dessineCercle programmé par le professeur où les 2 arguments sont des coordonnés en float.
Merci
Marsh Posté le 22-11-2009 à 16:07:36
Presque:
Code :
|
Une reference n'est pas un pointeur.
Ensuite tu utilise . pas ->
Marsh Posté le 22-11-2009 à 16:16:49
D'accord. J'ai implémenter les méthodes comme tu m'as indiqué.
Ainsi, dans le main je fais :
Liste * listecorps=new Liste();
dessineCercle(listecorps[j].position.x,listecorps[j].position.y,0.2);
il me donne l'erreur suivante : ‘class Liste’ has no member named ‘position’
Merci.
Marsh Posté le 22-11-2009 à 16:29:58
oui. Tu melange tout là, le [] que tu utilise ici est le crochet de tableau qui s'applique à ton pointeur de Liste, pas celui de Liste.
On est pas en JAVA, donc pas besoin de new...
Liste l;
dessineCercle(l[j].position.x,l[j].position.y,0.2);
mais ca ne amrchera que si tu as rempli ta liste hein
Marsh Posté le 22-11-2009 à 16:38:06
Super ca a l'air de marché !
Par contre, ce n'estp lus un tableau de pointeur mais un tableau de corps c'est bien ca ?
Y'a pas moyen de faire un tableau de pointeur ? Non parceque vu que j'ajoute des corps au fur et à mesure du programme ca risque de ne pas marché avec un tableau statique.
merci beaucoup,
berse`
Marsh Posté le 22-11-2009 à 16:51:14
attention tu melanges tout.
ton tableau il est DANS ta classe liste. La manière dont tu alloue ta liste n'influence pas ça.
Si tu veut un tableau de pointeur de corps à l'interieur de ta classe, il faut l'allouer en tant que tel. C'ets super casse-geule et donc plus facilement faisable avec std::vector.
Marsh Posté le 22-11-2009 à 13:08:25
Bonjour,
J'ai un petit probleme de classe.
Introduction :
En fait ,j'ai crée une classe liste qui me permet de gerer des tableaux contenant des structures ( ici corps )
J'ai due donc redéfinir l'operateur []
Mais si je veux appellée une composante de la structure ce n'est pas possible :
listecorps[j]->position.x // il me dit : base operand of ‘->’ has non-pointer type ‘Liste’
listecorps[j].position.x // il me dit : ‘class Liste’ has no member named ‘position’
Je me suis dis que vu que je parle ici de pointeur, il faudrai surcharger l'operateur [], ce que j'ai essayé de faire, mais cela ne fonctionne pas :
corps* Liste::operator[](int)’ cannot be overloaded
Concretement :
Ainsi, j'ai décidé de créer une fonction get :
J'ai ecris dans la classe la méthode :
et dans le liste.cpp :
Il m'indique encore une erreur dans le liste .cpp :
error: no match for ‘operator*’ in ‘**(((Liste*)this)->Liste::liste + ((unsigned int)(((unsigned int)p) * 28u)))’
Je ne comprend pas l'erreur,
J'attend vos réponses avec impatiente.
Merci d'avance,
berse`