Bonjour,
dans ma vaine tentative de faire une liste chainée, dont voici une partie du code, je suis confronté à un problème en voici le message d'erreur
line 16 assignment to Noeud * from incompatible pointer type struct Noeud *
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| #include <stddef.h>
typedef struct {
int valeur;
struct Noeud* suivant;
} Noeud;
void ajouter_noeud (Noeud tête, Noeud n) {
Noeud* tmp = &tête;
while(tmp->suivant != NULL) {
tmp = tmp->suivant;
}
// reste du code
} |
plus que la solution, c'est l'explication qui m'intéresse.
Dans ma struct Noeud je référence le noeud suivant, c'est à dire que j'ai une définition récursive de Noeud. Le seul moyen, semblerai t-il est de crée un pointeur sur une struct Noeud.
Pour pouvoir parcourir ma liste, le pointeur tmp, de type Noeud* reçoit, la valeur pointée par suivant de type Struct Noeud*. Il y a donc une incompatibilité de type.
Mais je n'arrive pas résoudrai cette incompatibilité.
Ce que j'ai essayer:
un cast (Noeud) suivant;
une autre "solution" suggérée remplacer la définition de la struct Noeud par:
1 2 3 4 5 6 7
| typedef struct Noeud noeud;
struct Noeud {
int valeur;
Noeud *suivant;
}; |
aucune ne fonctionne.
Qu'elles explications me permettrai de résoudre mon problème ?
Partager