c++ - Why is a constructor necessary in a const member struct? -


मेरे पास इसके जैसा एक कोड है:

 < कोड> वर्ग AClass {सार्वजनिक: स्ट्रक्चर एस्ट्रक्ट {}; AClass () {} निजी: const AStruct m_struct; }; Int main () {एसीलास ए; }   

यह इस संकलन त्रुटि (संस्करण 5.1 के साथ) को फेंकता है:

  त्रुटि: 'AClass' के लिए कन्स्ट्रक्टर यदि कोई सी ++ 11 डिफ़ॉल्ट कन्स्ट्रक्टर को  struct aschruct  के लिए निर्दिष्ट करता है, तो मुझे उसी त्रुटि मिलती है:    

>

  स्ट्रेट एस्ट्रक्ट {aschruct () = डिफ़ॉल्ट; };   

हालांकि, यह एक खाली शरीर के साथ एक कन्स्ट्रक्टर लिखकर हल किया जाता है:

  struct aschruct {AStruct ( ) {} // तय};   

मुझे एक खाली कन्स्ट्रक्टर निर्दिष्ट करने की आवश्यकता क्यों है? क्या यह स्वत: स्ट्रैक्ट्स के लिए सार्वजनिक पहुंच के साथ नहीं बनाई गई है?

सी + + 11 डिफ़ॉल्ट कन्स्ट्रक्टर समस्या को हल क्यों नहीं करता?

से § 8.5 [dcl.init] / 7:

यदि कोई प्रोग्राम कॉन्स्ट-क्वालिफाइड के ऑब्जेक्ट के डिफ़ॉल्ट आरंभीकरण के लिए कॉल करता है प्रकार टी, टी एक उपयोगकर्ता द्वारा प्रदत्त डिफ़ॉल्ट कन्स्ट्रक्टर के साथ एक क्लास प्रकार होगा।

AClass का डिफ़ॉल्ट कन्स्ट्रक्टर डिफ़ॉल्ट- const सदस्य (नीचे देखें), ताकि सदस्य को उपयोगकर्ता द्वारा प्रदत्त डिफ़ॉल्ट कन्स्ट्रक्टर होना चाहिए। = डिफ़ॉल्ट का उपयोग करने से कोई उपयोगकर्ता द्वारा प्रदत्त डिफ़ॉल्ट कन्स्ट्रक्टर नहीं होता है, जैसा कि § 8.4.2 [dcl.fct.def.default] / 4 में देखा जा सकता है:

एक फ़ंक्शन उपयोगकर्ता द्वारा प्रदान किया जाता है, अगर यह उपयोगकर्ता घोषित किया गया है और स्पष्ट रूप से उसके पहले घोषणा में हटाया नहीं गया है।


सदस्य प्रति -12. .2 [class.base.init] / 8:

एक गैर-प्रतिनिधि कंट्रोलर में, अगर कोई गैर-स्टैटिक डेटा सदस्य या बेस क्लास को मेम-प्रारंभकर्ता आईडी द्वारा निर्दिष्ट नहीं किया गया है (उस मामले सहित जहां कोई मेम-प्रारंभिक सूची नहीं है क्योंकि कन्स्ट्रक्टर के पास कोई सीटीओआर-प्रारंभकर्ता नहीं है) और इकाई एक अमूर्त वर्ग (10.4) का वर्चुअल बेस क्लास नहीं है, फिर

एक ?? ?? यदि इकाई एक गैर-स्थिर डेटा सदस्य है जिसमें एक ब्रेस-या-सम-प्रारंभकर्ता है, तो इकाई 8.5 में निर्दिष्ट के रूप में आरंभ की जाती है; अन्यथा, यदि इकाई एक अज्ञात संघ या एक भिन्न सदस्य (9.5) है, तो कोई आरंभीकरण नहीं किया जाता है; अन्यथा, इकाई डिफ़ॉल्ट-प्रारंभिक (8.5) है।

Comments

Popular posts from this blog

ios - Adding an SKSpriteNode to SKScene from a child SKSpriteNode -

Matlab transpose a table vector -

c# - Textbox not clickable but editable -