2010-08-31 14 views
9

का उपयोग कर मैं इस कास्ट करना चाहते हैं:डाली स्थिरांक कक्षा dynamic_cast

class Base 
{ 
public: 
    virtual ~Base(){}; 
}; 
class Der : public Base {}; 

int main() 
{ 
    const Base* base = new Der; 
    Der* der = dynamic_cast<Der*>(base); // Error 

    return 0; 
} 

मुझे क्या करना चाहिए? मैंने डालने की कोशिश की: const Der* der = dynamic_cast<Der*>(base); को कॉन्स्टेंट करने के लिए लेकिन यह काम नहीं करता है।

उत्तर

17

इस प्रयास करें:

const Der* der = dynamic_cast<const Der*>(base); 

dynamic_cast एक const क्वालीफायर को दूर करने की क्षमता नहीं है। आप const को const_cast का उपयोग करके अलग से निकाल सकते हैं, लेकिन आमतौर पर अधिकांश स्थितियों में यह एक बुरा विचार है। उस मामले के लिए, यदि आप dynamic_cast का उपयोग करके स्वयं को पकड़ते हैं, तो आमतौर पर यह संकेत मिलता है कि आप जो करने की कोशिश कर रहे हैं, उसके लिए एक बेहतर तरीका है। यह हमेशा गलत नहीं होता है, लेकिन इसके बारे में एक चेतावनी संकेत के रूप में सोचें कि आप चीजों को कठिन तरीके से कर रहे हैं।

+0

मैंने कोशिश की कि यह काम नहीं करता है। – okami

+0

आपको दो बार कॉन्स की आवश्यकता है - एक बार चर के प्रकार को आवंटित किया जा रहा है, और एक बार 'dynamic_cast' में। आपने जो कोशिश की है उसके उदाहरण में, आपके पास केवल पहला था। – Eclipse

+0

ठीक है। लेकिन मेरे प्रश्न के तहत सिर्फ एक quesiton। मुझे वर्चुअल ~ बेस() {} क्यों रखना चाहिए; dynamic_cast में मुझे कोई त्रुटि नहीं है? – okami

2
const Der* der1 = dynamic_cast<const Der*>(base); 

Der* der2 = dynamic_cast<Der*>(const_cast<Base*>(base)); 

जबकि उपर्युक्त कास्टिंग दोनों काम करते हैं, दूसरे को टालना चाहिए।

+0

कोड टैग जोड़ने के लिए संपादित किया गया। – Puppy

संबंधित मुद्दे