2012-09-20 15 views
17

क्या यह कानूनी सी ++ है?क्या आप किसी अन्य सदस्य की घोषणा करते समय एक सदस्य के आकार का उपयोग कर सकते हैं?

struct foo 
{ 
    int a[100]; 
    int b[sizeof(a)/sizeof(a[0])]; 
}; 

जीसीसी 4.6 इसे स्वीकार करता है, लेकिन एमएसवीसी 2012 नहीं करता है। ऐसा लगता है कि यह मेरे लिए ठीक होना चाहिए, लेकिन कुछ गुगलिंग ने मदद नहीं की और मुझे नहीं पता कि मानक में कहां देखना है।

error C2327: 'foo::a' : is not a type name, static, or enumerator 
error C2065: 'a' : undeclared identifier 
error C2070: ''unknown-type'': illegal sizeof operand 
warning C4200: nonstandard extension used : zero-sized array in struct/union 
+0

संभव डुप्लिकेट: // stackoverflow.com/questions/9656941/why-i-cant-initialize-non-const-static-member-or-static-array-in-class) –

+2

भले ही अंतिम कारण समान है, सवाल मेरे लिए बहुत अलग दिखता है । – Gorpik

+2

सी ++ 11 मानक में प्रासंगिक पैराग्राफ क्लॉज 5, अनुच्छेद 8 है, मुझे लगता है। – jrok

उत्तर

18

यह सी ++ 03 क्योंकि इन सदस्यों nonstatic datamembers हैं में अवैध रूप से किया गया था:

MSVC 2012 निम्नलिखित उत्पादन देता है।

सी ++ 11 से शुरू करना यह एक अनिवार्य ऑपरेशन में कानूनी है क्योंकि आप बिना किसी वस्तु के गैर-डेटाैटमबर्ग का उपयोग कर सकते हैं।

1

इस प्रयास करें: यह MSVC 2010 और MSVC के लिए एक समाधान के 2012

struct Aoo 
{ 
    typedef int ArrayType; 
    ArrayType a[100]; 
}; 

struct foo : public Aoo 
{ 
    enum {bSize = sizeof(Aoo)/sizeof(Aoo::ArrayType)}; 
    int b[bSize]; 
}; 
की [मैं क्यों गैर स्थिरांक स्थिर सदस्य या कक्षा में स्थिर सरणी प्रारंभ नहीं कर सकते हैं?] (Http
संबंधित मुद्दे