2011-06-10 12 views
5

दूसरा कन्स्ट्रक्टर पहले छाया क्यों कर रहा है?छायांकन पैरामीटर

class RC2{ 
    private; 
     bool keyset; 
    public: 
     RC2(uint32_t t1 = 64){ 
      keyset = false; 
     } 

     RC2(const std::string KEY, uint32_t t1 = 64){ 
      RC2(t1); 
      //setkey(KEY); 
     } 
}; 

मुझे दे रहा है: error: declaration of 'RC2 t1' shadows a parameter

मुझे लगता है कि होगा गंदगी C++ 0x

+1

"overshadow" से आपका क्या मतलब है? –

+0

आप किस कंपाइलर का उपयोग कर रहे हैं। आप सही हैं, कंपाइलर को दो रचनाकारों के बीच अंतर करने में कोई समस्या नहीं होनी चाहिए। एक तरफ ध्यान दें, स्ट्रिंग के एक कॉन्स्ट संदर्भ में गुजरना, वास्तविक स्ट्रिंग ऑब्जेक्ट नहीं, एक अच्छा अभ्यास है। –

+0

overshadowing द्वारा आपका क्या मतलब है? –

उत्तर

9

क्योंकि RC2(t1); एक स्थानीय परिवर्तनीय घोषणा है जो कि t1 पर तर्क दे रहा है, अन्य कन्स्ट्रक्टर को कॉल नहीं। निम्नलिखित कोड भी मान्य है:

int main(int argc,char* args[]) 
{ 
    int(a); 
    a = 2; 
    return a; 
} 

नोट! सी ++ 11 से पहले, सी ++ में एक कन्स्ट्रक्टर से उसी वर्ग पर एक और कन्स्ट्रक्टर को कॉल करने का कोई तरीका नहीं था। यदि आप पुराने सी ++ संस्करण का उपयोग कर रहे हैं तो Init() -method जो दोनों रचनाकारों का आह्वान करते हैं।

+0

एक निजी चर के रूप में एक अपरकेस 'T1' है, लेकिन यह है। रचनाकारों – calccrypto

+1

'आरसी 2 (कॉन्स std :: स्ट्रिंग कुंजी, uint32_t t1 = 64) को छोड़कर कहीं भी परिभाषित नहीं किया गया है '' टी 1' और 'आरसी 2 (टी 1)' की पहली घोषणा दूसरी घोषणा है (पहले छायांकन)। – larsmoa

+1

बस भविष्य के संदर्भ के लिए "सी ++ में एक कन्स्ट्रक्टर से उसी वर्ग पर एक और कन्स्ट्रक्टर को कॉल करने का कोई तरीका नहीं है"। लिखे जाने पर यह सच था, लेकिन सी ++ 11 के बाद यह अब मामला नहीं है। रचनाकार अब अन्य रचनाकारों का उपयोग कर सकते हैं। – wjl

4
साथ codeblocks जीसीसी का उपयोग कर इन

im के बीच भेद करने के लिए संकलक के लिए कोई रास्ता नहीं है कि वहाँ

त्रुटिकर्ता कन्स्ट्रक्टर घोषणा द्वारा ट्रिगर नहीं किया गया है।

त्रुटि उस पंक्ति पर उठाई गई है जो दूसरे कन्स्ट्रक्टर के ब्लॉक में के एक चर t1 घोषित करता है। इस परिवर्तनीय छाया को समान नाम t1 वैरिएबल ने कन्स्ट्रक्टर को एक तर्क दिया है।

मुझे लगता है कि RC2(t1); के साथ आपका इरादा अन्य कन्स्ट्रक्टर को कॉल करना था, लेकिन सी ++ में यह संभव नहीं है। सी ++ 2011 में यह संभव होगा, लेकिन एक और वाक्यविन्यास का उपयोग करना।

+0

आपने मुझे इसे हराया। –

+0

't1' एक प्रकार 'आरसी 2' नहीं है यह एक uint32_t है। और त्रुटि दूसरे कन्स्ट्रक्टर – calccrypto

+0

पर चिह्नित है: अपने दूसरे कन्स्ट्रक्टर के शरीर की पहली पंक्ति पर, आप एक चर 'टी 1' प्रकार' आरसी 2' घोषित करते हैं। मुझे लगता है कि आपका इरादा अन्य कन्स्ट्रक्टर को कॉल करना था, लेकिन सी ++ में यह संभव नहीं है। (यह सी ++ 2011 में संभव होगा, लेकिन एक और वाक्यविन्यास का उपयोग करना होगा।) –

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