2012-04-24 15 views
5

मैं आईडीई (Netbeans) इस तरह के एक struct की घोषणा कर रहा हूँ:संरचना घोषणा: घोषणा में वैध प्रारंभकर्ता?

struct foo { size_t var = 1; }

और आईडीई अपनी कानूनी कहते हैं। मैं प्रोजेक्ट संकलित करता हूं (इसकी एक स्थिर lib ..) और कंपाइलर का कहना है कि यह कानूनी है (रोना या फेंक नहीं)।

अब के बाद से मैं सिर्फ इस बात मैं कोई है जो पता हो सकता है पूछने के लिए कम से वाक्य रचना का परीक्षण कर रहा हूँ यह वास्तव में काम करेंगे, तो जब मैं इस तरह मेरे प्रक्रियाओं में इस टैग के एक struct घोषित करने के लिए जाना:

struct foo myfoo;

तो सवाल यह है: कि एक वैध initalizer है? (size_t var = 1) या संकलक सिर्फ मेरे अहंकार का पीछा कर रहा है? मुझे Google पर या इस तरह के दस्तावेज़ीकरण में कुछ भी नहीं मिला है, इसलिए मुझे लगता है कि यह जिस तरह से मुझे उम्मीद है कि यह काम नहीं करेगा।

* संपादित मुझे और अच्छा 'ol यहाँ लड़कों @SO पता लगा है कि यह एक डिबग विन्यास में संकलन होगा, लेकिन नहीं एक रिलीज विन्यास तो। कौन कहता है कि एक सिर दो हजार से बेहतर है? : डी

+1

संबंधित सवाल को देखने http://stackoverflow.com/questions/330793/how- टू-स्टार्ट-इन-स्ट्रक्चर-इन-ansi-c – TJD

+0

@TJD अब यह तेज़ और कमाल दोनों था! धन्यवाद। लेकिन मुझे अभी भी यह नहीं पता कि क्यों जीसीसी और आईडीई ने इसे बिना चिल्लाए। बस पूरी विस्फोट पर चेतावनी लात मार दी ... और मैं अभी भी क्रिकेट chirping सुन सकते हैं। जबरदस्त हंसी। –

+1

आप जीसीसी का किस संस्करण का उपयोग कर रहे हैं? मैंने अभी 4.4.3 के साथ कोशिश की है और मुझे 'अपेक्षित' त्रुटि मिलती है: ',', ','; ','} 'या' __attribute__ '' = 'टोकन' –

उत्तर

4

मुझे नहीं लगता कि इसकी अनुमति है। आप चर के लिए मूल्य निर्दिष्ट करने की आवश्यकता है, न कि struct:

struct foo { size_t var; }; 

struct foo myfoo = { 1 }; 

आईडीई के लिए के रूप में यह अनुमति देता है, स्पष्ट संभावना होगा कि कोड जैसे वास्तव में थोड़ा अलग है,:

struct foo { static const size_t var = 1; } 

... और आईडीई C++ के बजाय सी

+0

जो कुछ भी एक उत्सुक चीज़ पर जा रहा है। शायद यह मेरा अगला सवाल है। "यह एक संकलन चेतावनी क्यों झंडा नहीं है?" –

+0

मदद चीयर्स के लिए धन्यवाद! –

+1

@ TristonJ.Taylor आप हमें बताते हैं कि कारण क्या था? क्या आप सी ++ आईडीई का उपयोग कर रहे थे? –

1

सरल जवाब है यह संकलन है: आप struct परिभाषा अंदर प्रारंभ नहीं कर सकते हैं, इसलिए यदि संकलक है आपको ऐसा करने देना कि कुछ अजीब चल रहा है।

प्रारंभ करने के लिए आप एक वर में है कि struct का दृष्टांत (या कि अगर आप के लिए क्या जा रहे हैं है वस्तु) और कहा कि वर को प्रारंभ करने के लिए है।

तो, अपने struct के लिए:

struct foo { 
    size_t var = 1; 
} 


आप के रूप initiazlize होगा:

type function_name(...params...) { 
    struct foo myFooVar; 
    myFooVar.var = 1; 
    .... 
    return <type>; 
} 
+0

आपके उत्तर के लिए धन्यवाद! "कुछ अजीब चल रहा है .." देजा वू .. lol दूसरे शब्दों में: मेरी भावनाएं बिल्कुल ... –

+0

क्या आप बग की पुष्टि कर सकते हैं? 'जीसीसी (जीसीसी) 4.7.0 20120407 (प्रीरलीज)' –

+0

पाया गया: किसी प्रोजेक्ट के लिए डीबग कॉन्फ़िगरेशन उस स्लाइड को छोड़ देगा, रिलीज मोड मध्य पृथ्वी से ड्रेगन की आग फेंकता है .. या ऐसा कुछ। –