Bu yazının eski olduğunu biliyorum, ancak aradığınız efekti elde etmek için aşağıdakileri denemek isteyebilirsiniz:
#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;
Yukarıdaki kod parçasında belirtilen iki durumdan birinde, çocuğunuzun Hücre yapısını bir işaretçi olarak bildirmeniz GEREKİR. Bunu yapmazsanız, "field 'child' türünde eksik" hatası alırsınız. Bunun nedeni, derleyicinin kullanıldığında ne kadar alan ayıracağını bilmesi için "yapı hücresi" tanımlanması gerektiğidir.
"Struct Cell" tanımının içinde "struct Cell" kullanmaya çalışırsanız, derleyici henüz "struct Cell" in ne kadar alan alması gerektiğini bilemez. Bununla birlikte, derleyici bir işaretçinin ne kadar yer kapladığını zaten bilir ve (ileri bildirimle) "Cell" in bir tür "struct Cell" olduğunu bilir (ancak bir "struct Cell" in ne kadar büyük olduğunu bilmese de ). Böylece, derleyici, tanımlanan yapı içinde bir "Hücre *" tanımlayabilir.