Saya tahu posting ini sudah tua, namun, untuk mendapatkan efek yang Anda cari, Anda mungkin ingin mencoba yang berikut:
#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;
Dalam salah satu dari dua kasus yang disebutkan dalam fragmen kode di atas, Anda HARUS mendeklarasikan struktur sel anak Anda sebagai pointer. Jika tidak, maka Anda akan mendapatkan kesalahan "bidang 'anak' memiliki tipe tidak lengkap". Alasannya adalah bahwa "struct Cell" harus didefinisikan agar kompiler mengetahui berapa banyak ruang yang dialokasikan ketika digunakan.
Jika Anda mencoba menggunakan "struct Cell" di dalam definisi "struct Cell", maka kompiler belum dapat mengetahui berapa banyak ruang yang harus diambil oleh "struct Cell". Namun, kompiler sudah tahu berapa banyak ruang yang dibutuhkan pointer, dan (dengan deklarasi maju) ia tahu bahwa "Sel" adalah jenis "sel struct" (walaupun belum tahu seberapa besar "sel Cell" adalah ). Jadi, kompiler dapat mendefinisikan "Sel *" di dalam struct yang sedang didefinisikan.