दिलचस्प पोस्ट
पीडीएफ फाइलों को एंड्रॉइड में रेंडर करने के लिए पीडीएफ लाइब्रेरी साइगविन और मिनजीड के बीच क्या फर्क है? जावा में तारीखों में अंतर की गणना करना Javascript का उपयोग करके एक पेज लोड करने से एक आइफ्रेम को रोकना IDisposable को सही ढंग से कार्यान्वित करना रे और अंडाकार चौराहे सटीकता में सुधार कार्यक्रम के बिग-ओ दक्षता प्राप्त करना क्यों सिस्टम.रात्रिकॉपी जावा में मूल है? कैसे एक निष्पादक सेवा बंद करने के लिए? क्यों Mockito स्थिर विधियों नकली नहीं करता है? नियंत्रकों के लिए आधार वर्ग का उपयोग किए बिना सभी दृश्यों के लिए ViewBag गुण कैसे सेट करें? कुछ जुड़ी लाइनों के लिए रूपरेखा तैयार करें UIImagePickerController त्रुटि: एक दृश्य स्नैपशॉट जो आईओएस 7 में खाली स्नैपशॉट में परिणाम प्रदान नहीं किया गया है इंटरनेट श्रोता एंड्रॉइड उदाहरण NSLayoutConstraint "UIView-Encapsulated-Layout-Height" क्या है और मैं इसे कैसे ठीक से पुनर्गणना करने के लिए मजबूर करने के बारे में जाना चाहिए

सी ++ आभासी विरासत

मुसीबत:

class Base { public: Base(Base* pParent); /* implements basic stuff */ }; class A : virtual public Base { public: A(A* pParent) : Base(pParent) {} /* ... */ }; class B : virtual public Base { public: B(B* pParent) : Base(pParent) {} /* ... */ }; class C : public A, public B { public: C(C* pParent) : A(pParent), B(pParent) {} // - Compilation error here /* ... */ }; 

दी गई स्थिति में, जीसीसी शिकायत करता है कि यह फ़ंक्शन कॉल बेस () से मेल नहीं कर सकता, अर्थात डिफ़ॉल्ट कन्स्ट्रक्टर। लेकिन सी बेस से सीधे ए, बी और बी के माध्यम से ही नहीं मिलता है। तो जीसीसी शिकायत क्यों करता है?

विचार? टीआईए / रोब

Solutions Collecting From Web of "सी ++ आभासी विरासत"

virtual आधार वर्ग विशेष होते हैं कि वे सबसे अधिक व्युत्पन्न वर्ग द्वारा आरंभ किए जाते हैं और वर्चुअल आधार से प्राप्त होने वाली किसी भी इंटरमीडिएट बेस क्लास द्वारा नहीं। संभावित आधार पर कौन सा प्रारंभिक एक आधार को आरंभ करने के लिए सही विकल्प होगा?

यदि सबसे अधिक व्युत्पन्न वर्ग का निर्माण किया गया है, तो उसे सदस्य सदस्यता सूची में सूचीबद्ध नहीं किया जाता है, तो वर्चुअल बेस क्लास को उसके डिफॉल्ट कन्स्ट्रक्टर के साथ आरंभ किया जाता है जो कि मौजूद होना चाहिए और पहुंच योग्य होना चाहिए।

ध्यान दें कि वर्चुअल बेस पहचानकर्ता को कन्स्ट्रक्टर की प्रारंभिक सूची में उपयोग करने की अनुमति दी जाती है भले ही वह प्रश्न में वर्ग का प्रत्यक्ष आधार न हो।

आपको सी से बेस के लिए कन्स्ट्रक्टर को स्पष्ट रूप से कॉल करने की ज़रूरत है:

 class C : public A, public B { public: C(C* pParent) : Base(pParent), A(pParent), B(pParent) {} /*... */ }; 

यदि आप एक कस्टम कन्स्ट्रक्टर घोषित करते हैं, तो डिफ़ॉल्ट कन्स्ट्रक्टर अक्षम है। आभासी विरासत में आपको वस्तुतः विरासत में मिला कन्स्ट्रक्टर को सीधे कॉल करने की आवश्यकता है क्योंकि अन्यथा यह नहीं जानती कि ए या बी द्वारा आरंभ करना है या नहीं।