[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   -
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.
A voir également:

2 réponses

Mahmah Messages postés 496 Date d'inscription   Statut Membre Dernière intervention   125
 
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.

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.
0
Mahmah Messages postés 496 Date d'inscription   Statut Membre Dernière intervention   125
 
Après un petit essai, en demandant un C strict à mon compilateur il a rejeté le Message de la structure : type non défini. Il faut donc bien le "struct"

M.
0
jerémiethe7 Messages postés 152 Date d'inscription   Statut Membre Dernière intervention   32
 
re mahmha,

effetivement, il faut bien remettre le struct ainsi que les * devant listeSMS.

Merci du conseil encore une fois.
0