Liste chainée de pointeurs

floralastar03 Messages postés 4 Date d'inscription jeudi 15 juin 2006 Statut Membre Dernière intervention 16 juin 2006 - 15 juin 2006 à 17:17
cs_JCDjcd Messages postés 1138 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 25 janvier 2009 - 15 juin 2006 à 20:34
Bonjour

C'EST SUPER URGENT SVP

Je travaille sur un programme qui met en oeuvre des classes
d'objets avec des classes héritées et j'ai voulu intégrer des listes
chainées de pointeurs sur ces objets.

Ma liste se crée bien
mais quand je veux l'afficher, bug. Je possède 3 listes pour 3 classes
différentes ; et quand je souhaite afficher juste 1 liste, les 3 se
mélangent.

Voici le code de ma procédure Afficher :
void AfficherM(PileMul *p) // p est ma tete
{
MultiFonction *temp;   //temp est un pointeur sur ma classe Multifonction

temp = p->valeur;
do
   {
   cout << "\nLa reference est " << temp->GetRef();
   cout << "\nLe prix est de " << temp->GetPrix() << "\n";
   pause();
   temp = p->suiv;
   }
while ((temp->GetRef() != 0) && (temp->GetPrix() != 0));
}

Aidez moi s'il vous plait, je dois finir ce programme avant demain soir!!!
Merci d'avance

C'EST SUPER URGENT SVP

3 réponses

HSylvio Messages postés 116 Date d'inscription jeudi 22 juillet 2004 Statut Membre Dernière intervention 14 juin 2012
15 juin 2006 à 17:23
temp = temp->suiv ; au lieu de p peut etre non ??
Sinon jvoudrai bien voir ton remplissage de p...
0
floralastar03 Messages postés 4 Date d'inscription jeudi 15 juin 2006 Statut Membre Dernière intervention 16 juin 2006
15 juin 2006 à 17:32
Non je ne peux pas mettre p au lieu de temp car p->valeur contient l'adresse du pointeur sur l'objet. je dois récupérer cette adresse pour l'affecter dans une variable objet pour pouvoir accéder aux méthodes de la classe.

Voici comment je remplis ma liste : (pour info)
void AjoutM(PileMul *p, MultiFonction *mul)
{
PileMul *temp;

temp = p;
while (temp->suiv != NULL)
   temp = temp->suiv;

temp->valeur = mul;
PileMul *element = malloc(sizeof(PileMul));
element->valeur = NULL;
element->suiv = NULL;
temp->suiv = element;
}
0
cs_JCDjcd Messages postés 1138 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 25 janvier 2009 4
15 juin 2006 à 20:34
deux remarques :
* tu n'as pas a faire un <while> pour ajouter un element, regarde d'autres sources pour la programmation des listes, on insere en debut de liste, et non a la fin (sinon la ton algorithme est de complexité pas très "jolie")
* 310560 HSylvio a raison, l'erreur est dans <temp = p->suiv;> car cela ne "balaye" en rien ta liste ! Dans ta fonction tu le fais bien : < temp = temp->suiv;>

Pourquoi faire simple quand on peut faire compliqué ?
0
Rejoignez-nous