2010-12-19 10 views
21

मैं बहुत की तरह एक नेस्टेड वर्ग है, तो में नेस्टेड वर्ग परिभाषा:स्रोत फ़ाइल

class MyClass 
    { 
    class NestedClass 
    { 
    public: 
     // nested class members AND definitions here 
    }; 

    // main class members here 
    }; 

वर्तमान में, MyClass की परिभाषा CPP फ़ाइल में हैं लेकिन NestedClass की परिभाषा दी गई हेडर फाइल में कर रहे हैं, वह यह है कि, मैं CPP फ़ाइल में फ़ंक्शंस/कन्स्ट्रक्टर घोषित नहीं कर सकता।

तो मेरा सवाल यह है कि, मैं cpp फ़ाइल में NestedClass के कार्यों को कैसे परिभाषित करूं? यदि मैं नहीं कर सकता, तो कारण क्या है (और यदि यह मामला है, तो मुझे ऐसा क्यों लगता है कि ऐसा क्यों होता है लेकिन मुझे एक अच्छा स्पष्टीकरण चाहिए)? संरचनाओं के बारे में क्या?

उत्तर

40

आप कर सकते हैं। अपने भीतर के वर्ग की तरह एक विधि है:

class MyClass { 
    class NestedClass 
    { 
    public: 
     void someMethod(); 
    }; 

    // main class members here 
    }; 

... तो आप यह .cpp फ़ाइल में इतनी तरह परिभाषित कर सकते हैं:

void MyClass::NestedClass::someMethod() { 
    // blah 
} 

संरचनाएं लगभग C++ वर्ग के रूप में एक ही बात कर रहे हैं - बस उनकी पहुंच के लिए 'सार्वजनिक' के लिए डिफ़ॉल्ट। कक्षाओं की तरह ही उन्हें अन्य सभी मामलों में माना जाता है।

आप (के रूप में टिप्पणी में उल्लेख किया है) सिर्फ एक आंतरिक वर्ग, जैसे घोषणा कर सकते हैं:

class MyClass { 
    class NestedClass; 
    // blah 
}; 

..और तो कार्यान्वयन फ़ाइल में परिभाषित:

class MyClass::NestedClass { 
    // etc. 
}; 
+0

आपका क्या मतलब है "नहीं ... अन्य आंतरिक वर्गों की तरह"? –

+0

@ एएलएफ: मैंने 'नहीं' कहां लिखा? – sje397

+0

क्षमा करें, मेरी आंखें स्पष्ट रूप से पार हो गई हैं या कुछ। फिर भी सोच रहा है कि अंतिम वाक्य से आपका क्या मतलब है। मेरा मतलब है, बाहरी वर्ग के भीतर एक आंतरिक वर्ग को परिभाषित करने की आवश्यकता नहीं है (उदाहरण के लिए साधारण पीआईएमपीएल मुहावरे उस पर निर्भर करता है)। और यह प्रतीत होता है कि आप आखिरी वाक्य में क्या लिखते हैं, तो संभवतः आप का अर्थ सचमुच लिखा गया है उससे कुछ और? चीयर्स, –

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