Tôi biết bài này là cũ, tuy nhiên, để có được hiệu quả bạn đang tìm kiếm, bạn có thể muốn thử như 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 nêu tại các mã đoạn trên, bạn PHẢI khai báo cấu trúc ô con của bạn như một con trỏ. Nếu bạn không, sau đó bạn sẽ nhận được lỗi "field" child "có kiểu không đầy đủ". Lý do là "struct Cell" phải được định nghĩa để trình biên dịch biết được bao nhiêu không gian để phân bổ khi nó được sử dụng.
Nếu bạn cố gắng sử dụng "struct Cell" bên trong định nghĩa "struct Cell", thì trình biên dịch không thể biết bao nhiêu không gian "struct Cell" là nghĩa vụ phải thực hiện. Tuy nhiên, trình biên dịch đã biết bao nhiêu không gian con trỏ mất, và (với khai báo chuyển tiếp) nó biết rằng "Cell" là một loại "struct Cell" (mặc dù nó chưa biết lớn như thế nào "struct Cell" là). Vì vậy, trình biên dịch có thể định nghĩa một "Cell *" trong cấu trúc đang được xác định.
PS Trên thực tế nó Typedefs "struct di động" thành "di động" (đó là một mô hình phổ biến) –
Và nó là tự động trong C++. –
Vui lòng gắn lại với C++ nếu đó là ý định của bạn (tôi cho rằng đó là vì bạn đã chấp nhận câu trả lời không hoạt động trong C và bạn đã sử dụng bool (mặc dù cũng có thể được đánh máy trong C)). – paxdiablo