ऑटो और गतिशील_कास्ट का उपयोग करते समय मुझे एक बहुत अजीब व्यवहार का सामना करना पड़ा है।गतिशील कास्ट एक संदर्भ और ऑटो
class BaseInterface {
public:
virtual void someMethod()=0;
};
class Derived:public BaseInterface {
public:
virtual void someMethod1()=0;
void someMethod()override;
};
और निश्चित रूप से वहाँ कुछ वर्गों है कि सभी व्युत्पन्न तरीकों को लागू कर रहे हैं: यह पदानुक्रम मैं वर्ग है।
class ThirdClass {
public:
void demoMethod(BaseInterface&);
void anotherMethod(Derived&);
};
void ThirdClass::demoMethod(BaseInterface& obj) {
auto buffer=dynamic_cast<Derived&>(obj);
anotherMethod(buffer);
}
जब मैं इस जीसीसी के साथ संकलन मैं एक "सार प्रकार का ऑब्जेक्ट आवंटित नहीं कर सकता" त्रुटि मिलती है:
तो फिर वहाँ एक तृतीय श्रेणी के जो इस तरह दिखता है। जबकि जब मैं
auto buffer=...
की जगह के साथ
Derived& buffer=...
सब कुछ ठीक संकलित करता है। वह मामला क्या है? क्या ऑटो सही प्रकार या कुछ कम नहीं कर रहा है?
इसके अलावा मैं एक गंदा चाल पाया अभी भी ऑटो उपयोग करने के लिए: auto
से
void ThirdClass::demoMethod(Base& obj) {
auto buffer=dynamic_cast<Derived*>(&obj);
anotherMethod(*buffer);
}
मैं अनुमान लगा रहा हूं कि 'ऑटो' प्रकार 'व्युत्पन्न बफर' टाइप करता है, न कि 'व्युत्पन्न और बफर'। – melpomene
क्या आप g ++ का संस्करण उपयोग कर रहे हैं? अपने कोड को संकलित करने के लिए ठीक काम करता है [छोटे टाइपो को ठीक करने के बाद 'डेमो मोड' पर कोई रिटर्न टाइप नहीं है और 'व्युत्पन्न' पर कोई विरासत नहीं है - दोनों क्लैंग ++ 3.7 (लगभग दो सप्ताह पुराना) और g ++ 4.9.2। –
@ मैट्स पीटरसन: यदि लापता रिटर्न प्रकार तय किया गया है, तो जो भी संकलक विचारक उपयोग करता है, उसके साथ रिपोर्ट किए गए तरीके में विफल रहता है: http://ideone.com/UEtfui –