क्या error C2243 से छुटकारा पाना संभव है?त्रुटि से छुटकारा पाएं C2243
class B {};
class D : protected B {};
D d;
B *p = &d; // conversion from 'D *' to 'B &' exists, but is inaccessible
मैं अपने अनुप्रयोग में इस त्रुटि था और अंत में मैं एक स्पष्ट रूपांतरण करके इसे संकलित करने के लिए प्रबंधित किया है: क्यों विरासत में मिला संरक्षित वर्ग डी बनाकर
D d;
B *p = (B*)&d;
मैं नहीं समझ सकता बी से अंतर्निहित रूपांतरण अप्राप्य बनाता है।
मैं कक्षा डी में एक ऑपरेटर बी() बनाने के क्रम में रूपांतरण सुलभ बनाने के लिए द्वारा स्पष्ट रूपांतरण से बचने के लिए करने की कोशिश की:
class B {};
class D : protected B
{
public:
operator B() {return *this;}
};
लेकिन वहाँ कोई रास्ता नहीं है।
स्पष्ट रूपांतरण से बचने के लिए कोई अन्य समाधान?
के बारे में केवल का उपयोग करने देने के लिए क्या बेस क्लास का कॉन्स इंटरफेस? तो निजी तौर पर विरासत में और आधार बनाने के लिए कास्ट करने की इजाजत दी? पूछना क्योंकि यह एमएसवीसी पर काम नहीं कर सकता ... –
बस मुझे जवाब दे रहा है, आपको कक्षा को विरासत में विरासत से संभालने की आवश्यकता नहीं है, अन्यथा एमएसवीसी भ्रमित हो जाता है और निजी विरासत (छुपा कलाकार ऑपरेटर छुपा) –