Hi
Voila, avec avoir lu et compilé des exemples sur les listes chainées qui marchent à merveille, j'ai décidé pour voir si j'avait compris, de tout refaire moi-même sans regarder les exemples. J'ai réussi sauf une chose : typedef.
J'avais au départ fait tout le programme en utilisant la dénomination "struct eltliste" pour le type, ça marchait, j'ai rajouté typedef pour moins de prise de tête, et là pb.
En effet voila la déclaration :
Code :
- typedef struct
- {
- struct eltliste *suiv;
- struct eltliste *prec;
- int valeur;
- } eltliste;
- eltliste *FirstElt = NULL, *LastElt = NULL;
|
Et voilà là ou bloque le compilateur (GCC - DevCpp)
Code :
- int Ajoute(eltliste **fLastElt, int valeur)
- {
- eltliste temp;
- temp = **fLastElt;
- temp.suiv = malloc(sizeof(eltliste));
- if (temp.suiv==NULL) return -1;
- temp.suiv->prec = *fLastElt; // <----------------- ici
- temp.suiv->suiv = NULL;
- temp.suiv->valeur = valeur;
- **fLastElt = temp;
- *fLastElt = (*fLastElt)->suiv;
- }
|
[ certes ne n'est pas très bien codé, un peu trop compliqué pour rien ]
Il me dit : "dereferencing pointer to incomplete type".
Je rappelle que je n'ai rien changé sauf la dénomination de la structure (de "struct eltliste" à "eltliste" ).
Les champ prec et suiv étant eux par contre déclarés de type "struct eltliste", on peut penser que l'incompatibilité vient de là. Or les exemples que j'avais trouvé, j'ai vérifié marchait exactement pareil, le compilateur considérait donc que "struct eltliste" = "eltliste".
Où est la subtilité ?