Tôi biết bài đăng này đã cũ, tuy nhiên, để có được hiệu quả mà bạn đang tìm kiếm, bạn có thể muốn thử các cách sau:
#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;
Trong một trong hai trường hợp được đề cập trong đoạn mã ở trên, bạn PHẢI khai báo cấu trúc ô con của bạn dưới dạng con trỏ. Nếu không, thì bạn sẽ gặp lỗi "trường 'con' có kiểu không hoàn chỉnh". Lý do là "struct cell" phải được xác định để trình biên dịch biết được phân bổ bao nhiêu dung lượng khi nó được sử dụng.
Nếu bạn cố gắng sử dụng "struct Cell" bên trong định nghĩa của "struct Cell", thì trình biên dịch không thể biết được bao nhiêu không gian "struct Cell" sẽ phải sử dụng. Tuy nhiên, trình biên dịch đã biết con trỏ chiếm bao nhiêu dung lượng và (với khai báo chuyển tiếp) nó biết rằng "Ô" là một loại "ô di động" (mặc dù nó chưa biết "ô cấu trúc" lớn đến mức nào ). Vì vậy, trình biên dịch có thể định nghĩa một "Ô *" trong cấu trúc đang được xác định.