Я знаю, что этот пост старый, однако, чтобы получить эффект, который вы ищете, вы можете попробовать следующее:
#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;
В любом из двух случаев, указанных в коде фрагмент выше, вы ДОЛЖНЫ объявить свою дочернюю структуру ячеек как указатель. Если вы этого не сделаете, вы получите сообщение об ошибке «Поле» с неполным типом. Причина в том, что «struct Cell» должен быть определен для того, чтобы компилятор знал, сколько места выделяется при его использовании.
Если вы попытаетесь использовать «struct Cell» внутри определения «struct Cell», то компилятор еще не может определить, сколько пространства займет «ячейка». Однако компилятор уже знает, сколько пробелов занимает указатель, и (с помощью прямого объявления) он знает, что «Cell» - это тип «struct Cell» (хотя он еще не знает, насколько велика «ячейка структуры»). Таким образом, компилятор может определить «ячейку *» внутри структурируемой структуры.
PS На самом деле это "Определения типов STRUCT Cell" на "Cell" (это общий шаблон) –
И это происходит автоматически в C++. –
Пожалуйста, вернитесь к C++, если это было вашим намерением (я предполагаю, что это было, так как вы приняли ответ, который не будет работать на C, и вы использовали bool (хотя это также можно было бы ввести typedef в C)). – paxdiablo