मुझे पता है कि यह पोस्ट पुरानी है, हालांकि, जिस प्रभाव की तलाश में हैं, उसे प्राप्त करने के लिए, आप निम्नलिखित प्रयास करना चाह सकते हैं:
#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;
ऊपर दिए गए कोड के टुकड़े में वर्णित दोनों में से किसी भी मामले में, आपको अपने बच्चे के सेल संरचना को सूचक के रूप में घोषित करना होगा। यदि आप नहीं करते हैं, तो आपको "फ़ील्ड 'बच्चा' अधूरा प्रकार" त्रुटि मिलेगा। कारण यह है कि "स्ट्रक्चर सेल" को संकलक के लिए परिभाषित किया जाना चाहिए ताकि यह पता चल सके कि इसका उपयोग करने पर कितना स्थान आवंटित करना है।
यदि आप "स्ट्रक्चर सेल" की परिभाषा के अंदर "स्ट्रक्चर सेल" का उपयोग करने का प्रयास करते हैं, तो कंपाइलर को अभी तक पता नहीं चल सकता है कि "स्ट्रक्चर सेल" को कितना स्पेस लेना है। हालांकि, संकलक को पहले से ही पता है कि एक पॉइंटर कितना स्थान लेता है, और (आगे की घोषणा के साथ) यह जानता है कि "सेल" एक प्रकार का "स्ट्रक्चर सेल" है (हालांकि यह अभी तक नहीं पता है कि एक "स्ट्रक्चर सेल" कितना बड़ा है) )। इसलिए, कंपाइलर परिभाषित किए जा रहे ढांचे के भीतर "सेल *" को परिभाषित कर सकता है।