gcc - c++ virtual inheritance -
समस्या:
वर्ग बेस {सार्वजनिक: बेस (बेस * पीपीचर); / * बुनियादी सामान लागू करता है * /}; वर्ग ए: वर्चुअल लोक बेस {सार्वजनिक: ए (ए * पीपीन्ट): बेस (पीपीन्ट) {} / * ... * /}; वर्ग बी: वर्चुअल पब्लिक बेस {सार्वजनिक: बी (बी * पीपीन्ट): बेस (पीपीन्ट) {} / * ... * /}; वर्ग सी: सार्वजनिक ए, सार्वजनिक बी (सार्वजनिक: सी (सी * पीपीन्ट): ए (पीपीन्ट), बी (पीपीन्ट) {} // - यहां संकलन त्रुटि / * ... * /};
दी गई स्थिति में, जीसीसी शिकायत करता है कि यह फ़ंक्शन कॉल बेस () से मेल नहीं कर सकता है, अर्थात डिफ़ॉल्ट कन्स्ट्रक्टर। लेकिन सी बेस से सीधे ए, बी और ए के जरिए वारिस नहीं होता है। तो जीसीसी शिकायत क्यों करता है?
विचार? टीआईए / रोब
वर्चुअल
आधार वर्ग विशेष है कि इन्हें आरंभ किया जाता है सबसे व्युत्पन्न वर्ग और किसी भी मध्यवर्ती आधार वर्गों द्वारा नहीं जो आभासी आधार से प्राप्त होते हैं। एक बेस के प्रारंभ करने के लिए कौन सी संभावित कई आरंभिकों को सही विकल्प मिलेगा?
यदि सबसे अधिक व्युत्पन्न वर्ग का निर्माण किया गया है, तो इसे अपने सदस्यों की निजी सूची में सूचीबद्ध नहीं किया जाता है तो वर्चुअल बेस क्लास को इसके डिफ़ॉल्ट कन्स्ट्रक्टर के साथ आरम्भिक किया जाता है। जो मौजूद होना चाहिए और सुलभ होना चाहिए।
ध्यान दें कि वर्चुअल बेस पहचानकर्ता को कन्स्ट्रक्टर की प्रारंभिक सूची में उपयोग करने की अनुमति है, भले ही यह प्रश्न में वर्ग का प्रत्यक्ष आधार न हो।
Comments
Post a Comment