2012-10-10 5 views
5

निम्नलिखित कोड संकलित नहीं करेगा। क्यूं कर?संभव नहीं है: यह सूचक डिफ़ॉल्ट तर्क के रूप में है। क्यूं कर?

class A 
{ 
    int j; 
    void f(int i = this->j); 
} 

स्पष्टता के लिए संपादित करें। कोड की कम लाइनों का उपयोग करके मैं यही करने की कोशिश कर रहा था ...

class A 
{ 
    void f(int i){}; 
    void f(); 
    int j; 
}; 

void A::f() 
{ 
    f(j); 
} 
+2

आप यहां क्या करने की कोशिश कर रहे हैं? –

+3

क्योंकि तर्क तर्क घोषणा के अंदर दायरा में नहीं है ...? –

+2

"... अभिव्यक्ति वर्तमान कार्यक्षेत्र, निरंतर अभिव्यक्तियों और वैश्विक चर में दिखाई देने वाले कार्यों को जोड़ सकती है। अभिव्यक्ति में स्थानीय चर या गैर स्थैतिक वर्ग-सदस्य चर शामिल नहीं हो सकते हैं ..." –

उत्तर

6

डिफ़ॉल्ट तर्क मान संकलन समय पर बंधे हैं।

"यह" केवल रन टाइम पर परिभाषित किया गया है, इसलिए इसका उपयोग नहीं किया जा सकता है।

पूरा विवरण दिया गया के लिए यहाँ देखें: Must default function parameters be constant in C++?

+0

लेकिन सी ++ इस तरह क्यों डिजाइन किया गया था, कि डिफ़ॉल्ट तर्कों को संकलित समय पर बाध्य किया जाना चाहिए? ... – alexandreC

+0

@alexandreC यह एक और सवाल है। –

0

दूसरों को पहले से ही कारण यह काम नहीं करता पर टिप्पणी की है। टिप्पणियों में से एक से:

"... अभिव्यक्ति कार्यों कि वर्तमान क्षेत्र, निरंतर भाव, और वैश्विक चर में दिखाई दे रहे गठजोड़ कर सकते हैं अभिव्यक्ति स्थानीय चर या गैर स्थैतिक कक्षा नहीं हो सकते। सदस्य चर ... "

आप optional इस्तेमाल कर सकते हैं, हालांकि मुझे यकीन है कि यह स्पष्ट है नहीं कर रहा हूँ अतिरिक्त समारोह समाप्त करने के लिए:

void f(boost::optional<int> i = boost::none) { if(!i) i = j; ... }

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