2012-04-20 13 views
7

संभव डुप्लिकेट:
Forward declarations of unnamed structआगे एक अनाम struct के एक typedef घोषित

तो मेरे पास है

typedef struct tagPAGERANGE 
{ 
    int iFirstPage; 
    int iLastPage; 
} PAGERANGE; 

मैं अग्रेषित कर सकते हैं इसे उस तरह से

struct tagPAGERANGE; 
typedef struct tagPAGERANGE PAGERANGE; 
घोषित

लेकिन क्या मैं

typedef struct 
{ 
    int iFirstPage; 
    int iLastPage; 
} PAGERANGE; 

मैं कैसे मैं यह कर सकता यकीन नहीं है। मैं केवल इस संरचना में एक सूचक रखना चाहता हूँ। अभी मैं या तो पर्याप्त हेडर समेत, या संरचना की परिभाषा को डुप्लिकेट कर रहा हूं।

+2

सी ++ की तरह दिखता नहीं है। आपने इसे "सी ++" टैग के साथ क्यों टैग किया? – Griwes

+2

संरचना नामकरण में क्या गलत है? – mydogisbox

+1

सी और सी ++ अलग-अलग भाषाएं हैं। आप किस भाषा के बारे में पूछ रहे हैं? –

उत्तर

12

यह असंभव है। आप केवल नामित structs घोषित कर सकते हैं।

इस बारे में सोचें कि उस संरचना की पहचान किसके पास नहीं है, और आप संकलक को कैसे बताते हैं कि यह वह संरचना है जिसे आप चाहते हैं। यदि इसका कोई नाम नहीं है, तो इसकी पहचान इसके सदस्यों द्वारा की जाती है, इसलिए आपको सदस्यों को प्रदान करने की आवश्यकता है - यानी इसे परिभाषित करें। इसलिए, आप नहीं कर सकते हैं इसे घोषित करें - आपके पास परिभाषा के अलावा किसी अन्य पहचानकर्ता की लक्जरी नहीं है।

+0

एक वर्कअराउंड है: http://stackoverflow.com/a/7304634/347508 – kritzikratzi

2

चूंकि इसका उपयोग सी ++ कोड में किया जाता है, इसलिए टाइपिफ़ को पूरी तरह से छुटकारा पाएं, वे सी ++ में अनावश्यक और खराब शैली हैं।

struct foo; // forward declaration 

struct foo { 
    // … implementation 
}; 

typedefs उपयोगी नहीं हैं:

वास्तविक समाधान अभी नामित structs उपयोग करने के लिए है।

+3

हेडर फ़ाइल जो उन टाइपपीफ का उपयोग करती है वह मेरा नहीं है, और इसे सी और सी ++ दोनों में काम करने के लिए डिज़ाइन किया गया है। – sashoalm

+0

@satuon उस मामले में डुप्लिकेट प्रश्न देखें। जैसा कि बिल्ली ने कहा, यह संभव नहीं है लेकिन दूसरा प्रश्न एक (घृणित) कामकाज दिखाता है। –

संबंधित मुद्दे