Je sais que ce post est ancien, mais pour obtenir l'effet que vous recherchez, vous pouvez essayer ce qui suit :
#define TAKE_ADVANTAGE
/* Forward declaration of "struct Cell" as type Cell. */
typedef struct Cell Cell;
#ifdef TAKE_ADVANTAGE
/*
Define Cell structure taking advantage of forward declaration.
*/
struct Cell
{
int isParent;
Cell *child;
};
#else
/*
Or...you could define it as other posters have mentioned without taking
advantage of the forward declaration.
*/
struct Cell
{
int isParent;
struct Cell *child;
};
#endif
/*
Some code here...
*/
/* Use the Cell type. */
Cell newCell;
Dans l'un des deux cas mentionnés dans le fragment de code ci-dessus, vous DEVEZ déclarer votre structure Cell enfant comme un pointeur. Si vous ne le faites pas, vous obtiendrez l'erreur "field 'child' has incomplete type". La raison en est que la "struct Cell" doit être définie pour que le compilateur sache combien d'espace il doit allouer lorsqu'elle est utilisée.
Si vous essayez d'utiliser "struct Cell" à l'intérieur de la définition de "struct Cell", le compilateur ne peut pas encore savoir combien d'espace "struct Cell" est censé prendre. Cependant, le compilateur sait déjà combien d'espace prend un pointeur, et (avec la déclaration forward) il sait que "Cell" est un type de "struct Cell" (bien qu'il ne sache pas encore quelle est la taille d'un "struct Cell"). Le compilateur peut donc définir un "Cell *" dans la structure en cours de définition.