2010-07-27 9 views
16

मुख्य कोड में निम्नलिखित कोड का उपयोग किया जाना चाहिए, लेकिन मुझे नहीं पता कि इसका उपयोग कैसे किया जाता है।एएनएसआई सी में एक संरचना के भीतर enum का उपयोग कैसे करें?

struct SomeItem 
{ 
    enum {MOVIE, MUSIC} itemType; 
    union { 
     struct Movie* movie; 
     struct Music* music; 
    }; 
}; 

इस struct पिछले/आइटम/अगले सूचक के साथ एक गतिशील लिंक्ड सूची में प्रयोग किया जाता है, लेकिन मैं नहीं जानता कि कैसे आप enum निर्धारित कर सकते हैं। या इसे कैसे शुरू करें।

मुझे यह जानने की ज़रूरत है कि यह मुख्य कार्य में कैसा दिखता है।

biglist.someitem = ???; 
/* declaration I use */ 
struct Library* biglist; 

यह समझने के लिए कि मैं क्या करने की कोशिश कर रहा हूं, अधिक कोड।

struct Library{ 
struct SomeItem* someitem; 
struct SomeItem* previousItem; 
struct SomeItem* nextItem; 
}; 

संकलक त्रुटियों: C2037: MOVIE:: 'someitem' की बाईं अपरिभाषित struct/संघ 'पुस्तकालय' C2065 निर्दिष्ट करता अघोषित पहचानकर्ता

इम अभी भी ANSI C पर एकदम शुरुआत में, तो गोली मार मुझे ठीक न ;)

+0

एक कारण तुम वहाँ है संरचना घोषणा के बाहर 'typedef enum' का उपयोग नहीं करना चाहते हैं? – nmichaels

+3

तो किस कोड लाइन पर संकलक वास्तव में विफल रहता है ??? http://catb.org/esr/faqs/smart-questions.html – Dummy00001

+0

पहली त्रुटि के लिए, आप उस रेखा को नहीं दिखा रहे हैं जो संकलक शिकायत कर रहा है। दूसरी त्रुटि के लिए, या तो 'स्ट्रक्चर' की परिभाषा उस बिंदु पर दिखाई नहीं दे रही है, या आप सी ++ कंपाइलर के साथ सी कोड बनाने की कोशिश कर रहे हैं। कृपया अपने अधिक कार्यक्रम पोस्ट करें। मानसिक डीबगिंग करना मुश्किल है। –

उत्तर

13

आप हर जगह पॉइंटर्स का उपयोग कर रहे हैं, इसलिए आपको वस्तुओं का संदर्भ देने के लिए -> का उपयोग करने की आवश्यकता है।

यानी। biglist->someitem->itemType = MOVIE;

नीचे कोड जीसीसी के साथ ठीक संकलित -Wall -strict:

struct SomeItem 
{ 
    enum {MOVIE, MUSIC} itemType; 
    union { 
     struct Movie* movie; 
     struct Music* music; 
    } item; 
}; 

struct Library{ 
    struct SomeItem* someitem; 
    struct SomeItem* previousItem; 
    struct SomeItem* nextItem; 
}; 

int main(void) 
{ 
    struct Library* biglist; 

    biglist->someitem->itemType = MOVIE; 

    return 0; 
} 

(हालांकि इस कोड, निश्चित रूप से नहीं चलेंगे मैं biglist के लिए किसी भी स्मृति का आवंटन नहीं कर रहा हूँ के रूप में और someitem!)

+0

धन्यवाद! तुम दोनों! – TheDudeAbides

+0

आपको उपयोगी होने के लिए संरचना में यूनियन का नाम देने की आवश्यकता है? सिद्दीकी के जवाब की तरह। – user982671

+0

@ user982671 हाँ, अच्छा बिंदु, मैंने इसे अपडेट किया है।(संदर्भ के लिए, जीसीसी में अज्ञात यूनियनों की अनुमति है और सी 11 के रूप में एएनएसआई सी में भी।) – JosephH

4
biglist.someitem.itemType = MOVIE; /* or = MUSIC */ 

या, यदि someitem एक सूचक है,

biglist.someitem->itemType = MOVIE; /* or = MUSIC */ 
+0

धन्यवाद टायलर, मैंने ऐसा करने की कोशिश की है, लेकिन कार्यक्रम अभी भी संकलित नहीं होगा। मुझे लगता है कि मुझे अतिरिक्त कोड देना है .. – TheDudeAbides

+0

आपको वह कोड पोस्ट करना चाहिए जिसका उपयोग आप मूल्य निर्धारित करने के लिए कर रहे हैं (शामिल सभी चर के लिए घोषणाओं सहित), और संकलक द्वारा उत्पादित सटीक त्रुटि संदेश। और इस सामान को अपने प्रश्न में संपादित करें; एक टिप्पणी के रूप में इसके साथ जवाब मत देना। –

+0

क्या वह अभी हुआ था। – TheDudeAbides

0
struct SomeItem 
{ 
    enum {MOVIE, MUSIC} itemType; 
    union { 
     struct Movie* movie; 
     struct Music* music; 
    } item; 
    struct SomeItem *next; 
}; 
0

आप इस तरह से enum आरंभ कर सकते हैं biglist-> someitem = MOVIE; लेकिन संकलक प्रदान करती है पूर्णांक मूल्यों 0. तो से शुरू: biglist-> someitem = MOVIE रिटर्न 0 या biglist-> someitem = संगीत वापसी 1

जांच अगर यह किसी भी अच्छे मदद करता है,

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