Znam ten post jest stary, jednak aby uzyskać efekt, którego szukasz, możesz spróbować wykonać następujące czynności:
#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;
W każdym z tych dwóch przypadków wymienionych w kodzie fragment powyżej, MUSISZ zadeklarować swoje dziecko Struktura komórki jako wskaźnik. Jeśli tego nie zrobisz, otrzymasz błąd "pole" dziecko "ma niekompletny typ". Powodem jest to, że "struct Cell" musi zostać zdefiniowany, aby kompilator wiedział, ile miejsca należy przydzielić, kiedy zostanie użyty.
Jeśli spróbujesz użyć "struct Cell" w definicji "struct Cell", to kompilator nie może jeszcze wiedzieć, ile miejsca ma "struct Cell". Jednak kompilator już wie, ile miejsca zajmuje wskaźnik i (z deklaracją forward) wie, że "Cell" jest typem "struct Cell" (chociaż nie wie jeszcze, jak duża jest "struct cell"). Tak więc kompilator może zdefiniować "komórkę *" wewnątrz definiowanej struktury.
PS Właściwie to typedef struct "komórka" do "komórka" (to wspólny wzór) –
I to jest automatyczna w C++. –
Proszę retagować do C++, jeśli to był twój zamiar (zakładam, że było tak, odkąd przyjąłeś odpowiedź, która nie zadziała w C i użyłeś bool (chociaż to może być również wpisane w C)). – paxdiablo