Я знаю, що ця публікація стара, проте для отримання ефекту, який ви шукаєте, ви можете спробувати наступне:
#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;
У будь-якому з двох випадків, згаданих у фрагменті коду вище, ОБОВ'ЯЗКОВО оголосити структуру клітин своєї дитини як вказівник. Якщо цього не зробити, ви отримаєте помилку "поле" дитина "має неповний тип". Причина полягає в тому, що "структура Cell" повинна бути визначена для того, щоб компілятор знав, скільки місця буде виділено при її використанні.
Якщо ви спробуєте використати "struct Cell" всередині визначення "stru Cell", тоді компілятор ще не може знати, скільки місця має "структура Cell". Однак компілятор вже знає, скільки місця займає вказівник, і (при прямому оголошенні) він знає, що "Cell" - це тип "Stru Cell" (хоча він ще не знає, наскільки великий "struct Cell" ). Отже, компілятор може визначити "Cell *" у структурі, яка визначається.