2010-11-01 10 views
13

एक ही नाम साझा करने का कहते हैं कि मैं एक वर्ग नाम स्थान "abc" में 'foo' नामक करते हैं ...वर्ग और नामस्थान C++

namespace abc { 
    class foo { 
     int a; 
     int b; 
    }; 
} 

... और फिर मैं एक वर्ग "abc कहा जाता है का कहना है कि "एक अलग नाम स्थान

#include "foo.h" 

namespace foo { 
    class abc { 
     abc::a = 10; 
    }; 
} 

में एबीसी :: एक नहीं एक परिभाषित प्रकार है, क्योंकि यह खोज की जाएगी वर्ग एबीसी, नहीं नाम स्थान एबीसी होगा। मैं किसी अन्य नामस्थान में किसी ऑब्जेक्ट को उचित रूप से संदर्भित करने के बारे में कैसे जाउंगा, जिसमें उस अन्य नामस्थान का नाम वही नाम था जैसा मैं हूं?

उत्तर

22

आप ::abc::xx का उपयोग कर सकते हैं, यानी, चर के नाम या इसके पूर्ण नामस्थान पथ के रूप में टाइप करें। यदि आप एक पूर्ण नाम निर्दिष्ट नहीं करते हैं, तो सापेक्ष नाम नामस्थान/कक्षाओं सहित ऊपर की ओर बढ़ने लगते हैं।

+0

सबसे पहले प्रतिक्रिया निर्दिष्ट कर सकते हैं, .:! सबको धन्यवाद! – Monster

6

आप वैश्विक नामस्थान से शुरू निरूपित करने के लिए है, तो अपने मामले में ::abc अपने पहले कोड स्निपेट से abc नाम स्थान निरूपित करेगा एक उपसर्ग :: उपयोग कर सकते हैं।

5

आप एक पूरी तरह से योग्य नाम :: जो वैश्विक नामस्थान को परिभाषित करता है से शुरू उदाहरण के

namespace abc { 
    class foo { 
     int a; 
     int b; 
    }; 
} 

namespace foo { 
    class abc { 
     ::abc::foo a; // Changed from 'abc::a = 10;' since it doesn't compile 
    }; 
} 
संबंधित मुद्दे