2010-09-26 16 views
8

मैं जानता हूँ कि मैंसी ++ में मैं "आगे घोषित" क्या कर सकता हूं?

class Foo; 

और शायद

struct Bar; 

और वैश्विक कार्यों

bool IsValid(int iVal); 

क्या एक टाइप enum के बारे में क्या कर सकते हैं? एक अविकसित कक्षा के भीतर एक टाइप किए गए enum के बारे में क्या? एक अविकसित कक्षा के साथ एक समारोह के बारे में क्या? एक अविकसित कक्षा के भीतर एक स्थिर सदस्य के बारे में क्या? अज्ञात नेमस्पेस के भीतर इनके बारे में क्या? क्या मुझे कुछ और याद आ रहा है जिसे आगे घोषित किया जा सकता है?

+6

आप इसे क्यों नहीं देखते और देखते हैं? –

+0

enum सी ++ 0x में घोषित करने में सक्षम होने जा रहा है। और आप "आंशिक रूप से" कक्षाओं (विधियों की आगे की घोषणा) घोषित नहीं कर सकते हैं – erjot

+0

मैं उन वर्गों के भीतर टाइप किए गए enums डालता हूं जो उन्हें "परिभाषित" करते हैं। मैं फिर दो वर्गों के साथ "परिपत्र निर्भरता" संकलक मुद्दों में भाग लेता हूं जो एक-दूसरे के enums का संदर्भ देते हैं। – franji1

उत्तर

12

आप घोषणा आंशिक विशेषज्ञताओं सहित

  • टेम्पलेट, अग्रेषित कर सकते हैं
  • स्पष्ट विशेषज्ञताओं
  • नेस्टेड कक्षाएं
  • गैर नेस्टेड और स्थानीय वर्गों (इस structs, "असली" वर्गों और यूनियनों भी शामिल है)
  • चर ("बाहरी int a;")
  • कार्य

यदि "आगे की घोषणा" से आप सख्ती से "घोषित करें लेकिन परिभाषित नहीं करते हैं" तो आप सदस्य कार्यों की घोषणा भी कर सकते हैं। लेकिन जब आप घोषित हो जाते हैं तो आप उन्हें अपनी कक्षा परिभाषा में दोबारा नहीं बदल सकते हैं। आप गणना नहीं कर सकते हैं-गणनाएं घोषित करें। मुझे यकीन नहीं है कि मुझे कुछ याद आया है या नहीं।

कृपया ध्यान दें कि आंशिक और स्पष्ट विशेषज्ञता को छोड़कर ऊपर सूचीबद्ध सभी आगे की घोषणाओं को एक अयोग्य नाम का उपयोग करके घोषित करने की आवश्यकता है और सदस्य कार्य और घोंसला वाले वर्गों को केवल उनकी कक्षा परिभाषा में घोषित किया जा सकता है।

class A { }; 
class A::B; // not legal 

namespace A { } 
void A::f(); // not legal 

namespace A { void f(); } // legal 

class B { class C; }; // legal 
class B::C; // declaration-only not legal 

class D { template<typename T> class E; }; 
template<typename T> class D::E<T*>; // legal (c.f. 14.5.4/6) 
+1

मुझे लगता है कि आप सी ++ 0x से नई 'एनम क्लास' भूल गए हैं। अंतर्निहित प्रतिनिधित्व को सटीक करने का मुद्दा यह था कि अगर मैं सही से याद करता हूं तो इसे आगे घोषित करने योग्य है। –

+0

आंशिक-विशेषकरण घोषित करने में कोई बिंदु है? आंशिक विशेषज्ञता नाम लुकअप के दौरान दिखाई नहीं दे रही है, और टेम्पलेट के तत्काल के बिंदु पर हल हो जाती है - जिस बिंदु पर उन्हें पूरी तरह से परिभाषित किया जाना चाहिए। – willj

+0

@ विल्ज को बिना किसी त्रुटि के कुछ संदर्भों (आगे घोषित) में एक अपरिभाषित टेम्पलेट रखना अनुमत है, लेकिन टेम्पलेट परिभाषित होने पर तत्कालता करना। एडीएल कॉल करता है जहां आंशिक विशेषज्ञता के साथ तर्क प्रकार संबद्ध है उदाहरण है। यदि आपने इसे घोषित नहीं किया है लेकिन पहले से ही प्राथमिक टेम्पलेट को परिभाषित किया है, तो प्राथमिक टेम्पलेट इसके बजाय तत्काल किया जाएगा। –

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

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