2011-05-12 15 views
8

C++ में मैं जैसे कार्यों के कई आगे घोषणा हो सकती है:कई सदस्य समारोह आगे घोषणाओं

void Func (int); 
void Func (int); // another forward declaration, compiles fine 
void Func (int) {} // function definition, compiles fine 

और फिर भी कुलपति ++ 2010 की शिकायत जब मैं सदस्य कार्यों के लिए भी ऐसा ही करने (या नहीं, मैं एक परिभाषा में शामिल हैं):

class Test { 
    void Func (int); 
    void Func (int); // error C2535 here 
    void Func (int) {} // error here too 
    }; 

मैं कुछ भी ऑनलाइन कई सदस्य समारोह आगे घोषणाओं के बारे में नहीं मिल सकता है, अपनी कानूनी, अवैध, कुलपति ++ विशिष्ट, ect ... एक यह चारों ओर तरीका नहीं है कि क्या? क्या यह अवैध है?

अब मैं ऐसा क्यों करना चाहूंगा? विशेष रूप से कोई परियोजना नहीं, केवल कार्यों को पंजीकृत करने के विभिन्न तरीकों से खेल रही थी। अन्य परियोजनाओं में मुझे कार्यों/कक्षाओं को पंजीकृत करना पड़ा और कम हैक-आश का उपयोग किया गया लेकिन अधिक कठिन तरीके से उपयोग किया गया था, और मैक्रोज़/टेम्पलेट्स का उपयोग करके बस विभिन्न तरीकों का प्रयास कर रहा था।

कोई विचार या विचार? विशेष रूप से उपर्युक्त प्रश्न पर, लेकिन कार्यों/कक्षाओं को पंजीकृत करने पर भी।

अपना समय के लिए अग्रिम धन्यवाद;)

+0

आप वास्तव में ** सदस्य कार्य घोषित कर रहे हैं लेकिन आप ** कक्षा को परिभाषित कर रहे हैं, इसलिए कोई कह सकता है कि यह वास्तव में समझ में आता है। – ereOn

+0

जैसा कि @ बो पर्सन ने सही ढंग से कहा है, सदस्य कार्यों (कक्षा के भीतर) की आगे की घोषणाओं की कोई आवश्यकता नहीं है, क्योंकि कक्षा के अंदर कोई "आगे" नहीं है: सभी संदर्भों से जो पूरे वर्ग में महत्वपूर्ण है, हमेशा इसकी संपूर्णता में दिखाई देता है। – AnT

उत्तर

5

कोई भी सदस्य कार्यों की घोषणा अग्रेषित करने के लिए की जरूरत है। वे पूरी कक्षा में वैसे भी दिखाई दे रहे हैं।

+2

हालांकि यह सवाल नहीं है। –

+1

@ टोमालक - तो जवाब यह है कि भाषा इसकी अनुमति नहीं देती है क्योंकि इसकी आवश्यकता नहीं है? :-) –

+0

@ बोपरसन: ऐसा लगता है। मैं अपने जवाब में थोड़ा अधिक विस्तार से धारणा का पता लगाता हूं। –

11

आपके पास कक्षा के भीतर सदस्य फ़ंक्शन की कई घोषणाएं नहीं हो सकती हैं। आपका कोड का उल्लंघन करती है सी ++ स्टैंडर्ड जो कहते हैं

सदस्य समारोह परिभाषाओं कि एक वर्ग परिभाषा के बाहर दिखाई देते हैं के अलावा के 9.3/2, और सिवाय वर्ग टेम्पलेट्स और सदस्य समारोह टेम्पलेट्स के सदस्य कार्यों का स्पष्ट विशेषज्ञताओं के लिए (14.7) प्रदर्शित होने कक्षा परिभाषा के बाहर, एक सदस्य फ़ंक्शन को फिर से नहीं किया जाएगा।

+0

त्वरित उत्तर के लिए धन्यवाद;) – Kaisha

1

मार्क बी कहता है, मुफ्त कार्यों की घोषणा करना और सदस्य कार्यों को घोषित करना अलग-अलग माना जाता है।

नि: शुल्क फ़ंक्शन घोषणाओं को जगह के चारों ओर बिखराया जा सकता है, और यह आवश्यक है कि एक कार्यक्रम में केवल एक मिलान घोषणा मौजूद हो।

हालांकि, आप कक्षा परिभाषा के एक बड़े हिस्से में केवल एक कक्षा को परिभाषित कर सकते हैं, इसलिए इसकी सभी सदस्य घोषणाएं एक ही स्थान पर पाई जाती हैं। वे आपके कार्यक्रम के बारे में बिखरे नहीं जा सकते हैं; इसके परिणामस्वरूप, ऐसा कोई कारण नहीं मानक के लिए आप एक से अधिक सदस्य घोषणाओं लिखने के लिए ... अनुमति देने के लिए है, इसलिए यह नहीं है:

सदस्य समारोह परिभाषाओं कि एक वर्ग परिभाषा के बाहर दिखाई देते हैं के अलावा

, और स्पष्ट के अलावा वर्ग टेम्पलेट्स और सदस्य फ़ंक्शन टेम्पलेट्स (14.7) वर्ग परिभाषा के बाहर के बाहर दिखाई देने वाले सदस्यों के फ़ंक्शन को पुन: प्राप्त नहीं किया जाएगा। [9।3/2]


  1. ज़रूर, आप एक प्रोग्राम में उस वर्ग परिभाषा को कई बार शामिल कर सकते हैं, लेकिन यह वास्तव में इतनी के रूप में अच्छी तरह से बस से मेल खाना चाहिए, इस चर्चा के लिए, यह हो सकता है एक परिभाषा हो।
संबंधित मुद्दे