2012-11-27 19 views
11

मेरे पास रचनाकारों की एक जोड़ी है जो सी ++ 03 शैली में ठीक काम करती है। कंस्ट्रक्टर्स से एक एक सुपर क्लास (या आधार वर्ग) निर्माता कहता है ...प्रतिनिधि रचनाकार: एक प्रतिनिधि कन्स्ट्रक्टर के लिए प्रारंभकर्ता अकेले दिखाई देना चाहिए

class Window : public Rectangle 
{ 
public: 
    Window() : win(new RawWindow(*this)) 
    { 
     refresh(); 
    } 

    Window(Rectangle _rect) : Rectangle(_rect), win(new RawWindow(*this)) 
    { 
     refresh(); 
    } 
... 

मैं कैसे इस ऊपर एक छोटे से neaten के लिए नए सी ++ 11 delegating ctor कार्यक्षमता का उपयोग करने पता लगाने की कोशिश कर रहा हूँ। हालांकि, निम्नलिखित कोड निम्नलिखित संकलक त्रुटि ...

class Window : public Rectangle 
{ 
public: 
    Window() : win(new RawWindow(*this)) 
    { 
     refresh(); 
    } 

    Window(Rectangle _rect) : Rectangle(_rect), Window(){} 

देता है "एक सौंपने के निर्माता अकेले दिखाई देना चाहिए के लिए एक प्रारंभकर्ता" ...

वहाँ इस के आसपास कोई तरीका है ??

उत्तर

9

समस्या यह है कि Rectangle दो बार आरंभ हो रहा है।

आप जो एक प्रतिनिधियों क्या करने की कोशिश कर सकते बदलते:

Window(Rectangle _rect) : Rectangle(_rect), win(new RawWindow(*this)) 
{ 
    refresh(); 
} 

Window() : Window(Rectangle()) {} 

सबसे अच्छा समाधान शायद इस उदाहरण में कंस्ट्रक्टर्स सौंपने से बचना है।

+0

"इस उदाहरण में रचनाकारों को प्रतिनिधि से बचने से बचें" - आपके कोड के रूप में देखकर (धन्यवाद +1), क्या आप इस सुझाव को क्यों बना सकते हैं? – learnvst

+0

@learnvst वे एक फैंसी डिफ़ॉल्ट तर्क के रूप में कार्य कर रहे हैं। मुझे अधिक तर्कसंगत होने के लिए डिफ़ॉल्ट तर्क या आपका मूल कोड मिलता है। – Pubby

+0

हाँ, 'विंडो (आयत())' चीज थोड़ा अजीब लगती है। मैं देखता हूं कि आप कहां से आ रहे हैं। – learnvst

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