2011-06-01 4 views
7

सी ++ वॉल्यूम 1 में सोचने में, अध्याय 16: टेम्पलेट्स का परिचय। संदर्भ:दोस्त इटरेटर और मित्र वर्ग इटरेटर का क्या अंतर है जो सी ++ में सोचने में पड़ता है?

सूचना है कि बजाय सिर्फ कह रही:

friend iterator; // Make it a friend 

इस कोड है:

friend class iterator; // Make it a friend 

यह महत्वपूर्ण है क्योंकि नाम " इटेटर "अल्रे है एक शामिल फ़ाइल से, दायरे में ady।

एक्सेल वास्तव में ऊपर क्या मतलब है? ऐसा लगता है कि friend iterator सही ढंग से संकलित करता है और मैं अंतर नहीं देख सकता। क्या कोई जवाब बता सकता है? धन्यवाद

उत्तर

6

सी ++ 03 मानक खंड 11.4 के अनुसार:

एक सविस्तार-प्रकार-विनिर्देशक में एक दोस्त घोषणा एक वर्ग के लिए इस्तेमाल किया जाएगा।

इसलिए विनिर्देश के अनुसार संकलक आपको चेतावनी देगा कि iterator की मित्र घोषणा एक विस्तृत कक्षा का नाम होना चाहिए। यदि नहीं तो शिकायतकर्ता इस विशेष पहलू में मानक के अनुरूप नहीं है।

विस्तृत प्रकार निर्दिष्टकर्ता?
सी ++ एक वर्ग के रूप में कक्षा के इलाज के लिए स्पष्ट रूप से संकलक को बताने के लिए विस्तारित प्रकार विनिर्देशकों का उपयोग करें। मुझे लगता है कि एमएसडीएन इसे जितना संभव हो उतना बेहतर समझा सकता है, इसलिए विस्तृत स्पष्टीकरण के लिए this देखें।

+0

शायद 'विस्तारित प्रकार विनिर्देशक' के बारे में एक स्पष्टीकरण का अर्थ है, क्योंकि पता है, मानक सभी के लिए नहीं है। :) – Xeo

+0

@Xeo: एमएसडीएन के लिए एक लिंक जोड़ा गया, मुझे आशा है कि यह पर्याप्त होगा। :) –

+0

इसके अलावा, सी ++ 0x में यह प्रतिबंध टेम्पलेट पैरामीटर के लिए उठाया गया है, इसलिए अब हमारे पास टेम्पलेट क्लास फ़ाइनल {दोस्त डी; ~ अंतिम() {}}; '। – Xeo

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