[C] Liste chainée problème suivant.
Résolu
jerémiethe7
Messages postés
152
Date d'inscription
Statut
Membre
Dernière intervention
-
jerémiethe7 Messages postés 152 Date d'inscription Statut Membre Dernière intervention -
jerémiethe7 Messages postés 152 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
j'ai un problème avec mon compilateur qui me met des mesages d'erreurs sur les "suivant". Il me dit que "suivant" n'a pas été déclaré.
Voilà mon code :
typedef struct Message{
char SMS[tailleSMS+1];
char date[150];
char horloge[128];
Message *suivant;
}Message;
La fonction qui pose problème :
void InsertionDuMessage(Message **listeSMS,char *SMS,char *date, char *horloge)
{
int sortie=0;
Message *nouveau=(Message*)malloc(sizeof(M
essage));
strcpy(nouveau->SMS,SMS);
strcpy(nouveau->date,date);
strcpy(nouveau->horloge,horloge);
while(sortie==0)
{
if(strcmp(date,nouveau->date)<0)
listeSMS=listeSMS->suivant;
else
{
if(strcmp(date,nouveau->date)==0 && strcmp(horloge,nouveau->horloge)<0)
listeSMS=listeSMS->suivant;
else
{
nouveau->suivant=listeSMS->suivant; // une fois le jeton trouvé, on fait "passer" la liste chainee par notre jeton
listeSMS->suivant=nouveau;
sortie=1;
}
}
}
}
Pourtant j'ai bien déclaré un suivant avant ma fonction.
Voilà merci pour l'aide.
j'ai un problème avec mon compilateur qui me met des mesages d'erreurs sur les "suivant". Il me dit que "suivant" n'a pas été déclaré.
Voilà mon code :
typedef struct Message{
char SMS[tailleSMS+1];
char date[150];
char horloge[128];
Message *suivant;
}Message;
La fonction qui pose problème :
void InsertionDuMessage(Message **listeSMS,char *SMS,char *date, char *horloge)
{
int sortie=0;
Message *nouveau=(Message*)malloc(sizeof(M
essage));
strcpy(nouveau->SMS,SMS);
strcpy(nouveau->date,date);
strcpy(nouveau->horloge,horloge);
while(sortie==0)
{
if(strcmp(date,nouveau->date)<0)
listeSMS=listeSMS->suivant;
else
{
if(strcmp(date,nouveau->date)==0 && strcmp(horloge,nouveau->horloge)<0)
listeSMS=listeSMS->suivant;
else
{
nouveau->suivant=listeSMS->suivant; // une fois le jeton trouvé, on fait "passer" la liste chainee par notre jeton
listeSMS->suivant=nouveau;
sortie=1;
}
}
}
}
Pourtant j'ai bien déclaré un suivant avant ma fonction.
Voilà merci pour l'aide.
A voir également:
- [C] Liste chainée problème suivant.
- Liste déroulante excel - Guide
- Liste déroulante en cascade - Guide
- Liste code ascii - Guide
- Site dangereux liste - Guide
- Liste site streaming illégal - Accueil - Services en ligne
2 réponses
Re-bonjour ;-)
Il y a une petite chose qui n'a pas posé de problème chez moi mais je l'ai compilé avec les normes C++. Je ne suis pas sûr qu'en C ce soit valide. (je dirais après)
L'erreur principale sont les listeSMS->suivant
Message **listeSMS;
listeSMS est un double pointeur, il représente : un tableau de pointeurs (mais je ne vois pas sa taille) donc plus probablement l'adresse d'un pointeur pour qu'il soit modifiable par la fonction pour qu'elle puisse modifier éventuellement la tête de la liste.
Je pense donc à
(*listeSMS)->suivant;
Je ne suis pas le mieux placé pour voir exactement l'utilisation de la variable mais l'idée est là.
Pour le petit détail que je changerais. Je mettrais simplement un struct de plus dans la déclaration de la structure.
Je pense qu'à ce stade le typedef n'est pas encore fait donc le type Message n'est pas déclaré. Par contre le type struct Message l'est.
Un compilateur C++ accepte l'utilisation du type directement après un simple struct MonType. Si ton compilateur est strictement C et que ça lui va c'est juste que je raconte des bêtises ^^".
Voilou,
M.
Il y a une petite chose qui n'a pas posé de problème chez moi mais je l'ai compilé avec les normes C++. Je ne suis pas sûr qu'en C ce soit valide. (je dirais après)
L'erreur principale sont les listeSMS->suivant
Message **listeSMS;
listeSMS est un double pointeur, il représente : un tableau de pointeurs (mais je ne vois pas sa taille) donc plus probablement l'adresse d'un pointeur pour qu'il soit modifiable par la fonction pour qu'elle puisse modifier éventuellement la tête de la liste.
Je pense donc à
(*listeSMS)->suivant;
Je ne suis pas le mieux placé pour voir exactement l'utilisation de la variable mais l'idée est là.
Pour le petit détail que je changerais. Je mettrais simplement un struct de plus dans la déclaration de la structure.
typedef struct Message{ char SMS[tailleSMS+1]; char date[150]; char horloge[128]; struct Message *suivant; // <- Déclaration récurssive }Message;
Je pense qu'à ce stade le typedef n'est pas encore fait donc le type Message n'est pas déclaré. Par contre le type struct Message l'est.
Un compilateur C++ accepte l'utilisation du type directement après un simple struct MonType. Si ton compilateur est strictement C et que ça lui va c'est juste que je raconte des bêtises ^^".
Voilou,
M.