1, si tu veux utiliser une struct dans une autre struct qui est définie plus haut, tu dois déclarer d'avance la deuxième struct car la struct en haut ne reconnait pas l'existance d'une struct pas encore déclarée.
struct Arbre; // <- En anglais, on appelle ça forward declaration
struct Element{
struct Arbre val;
struct Element* suiv;
};
typedef struct Element* Liste;
struct Arbre{
struct Arbre* pere;
Liste fils;
};
typedef struct Arbre Arbre;
2, le prochain problème est lié au fait que le membre val de la struct Element ne peut pas être déclaré localement car la struct Arbre n'a pas encore de définition alors val ne sait pas combien de mémoire lui réserver. Ce problème ce règle simplement en fesant un pointeur sur Arbre et tu va devoir faire l'allocation de mémoire plus tard.
struct Arbre;
struct Element{
struct Arbre* val; // val est un pointeur et non une variable locale
struct Element* suiv;
};
typedef struct Element* Liste;
struct Arbre{
struct Arbre* pere;
Liste fils;
};
typedef struct Arbre Arbre;
Avec ces 2 corrections, ça compile sur GCC.
Message édité le 22 janvier 2016 à 03:25:46 par drakenlorde