2012-06-28 9 views
6

के रूप में प्रारंभ करें मेरे पास static map है जो private डेटा सदस्य है। मैं इसे कार्यान्वयन फ़ाइल में कैसे प्रारंभ करूं ताकि प्रारंभिक कंटेनर खाली हो जाएं? यह const नहीं है। यह महत्वपूर्ण है कि इस कंटेनर में शुरुआत में कुछ भी नहीं है।खाली एक स्थिर निजी मानचित्र को

उत्तर

7

हैडर:

class XXX { 
private: 
    static std::map<X,Y> the_map; // declares static member 
// ... 

कार्यान्वयन फ़ाइल:

std::map<X,Y> XXX::the_map; // defines static member 

कि अपने नक्शे के लिए एक निर्माता कॉल से जोड़ दिया जाएगा आपके प्रोग्राम प्रारंभिक कोड (और सफाई में एक विनाशक) में। हालांकि सावधान रहें - विभिन्न अनुवाद इकाइयों के बीच इस तरह के स्थिर रचनाकारों का क्रम अनिर्धारित है। भी

--- test.h ---

// includes and stuff... 
class SomeClass 
{ 
    private: 
     static std::map<int,std::string> myMap; 
}; 

--- test.cpp ---

std::map<int,std::string> SomeClass::myMap; // <-- initialize with the map's default c'tor 

आप एक आरंभीकरण उपयोग कर सकते हैं:

+0

यह कहता है कि मेरा नक्शा निजी है और इसलिए मेरी सीसी फ़ाइल के शीर्ष पर डिफ़ॉल्ट प्रारंभिकता अमान्य है। –

+0

अपना कोड पोस्ट करें, आप कहीं गलती कर रहे हैं। –

+0

मुझे अपने टाइपपीफ को सार्वजनिक रूप से ले जाना पड़ा, लेकिन मेरे सदस्य को निजी रखा। यह तय है। –

5

कैसे इस बारे में (अगर मैं तुम्हें सही ढंग से समझ):

std::map<T,T2> YourClass::YourMember = std::map<T,T2>(); 
+0

या बस 'std :: map YourClass :: YourMember;' –

+0

@MikeSeymour: बिल्कुल। बस यह स्पष्ट करना कि आप कन्स्ट्रक्टर तर्क दे सकते हैं यदि आप चाहते थे। – Linuxios

3

यदि आप वर्ग परिभाषा में परिभाषित है, तो आप कार्यान्वयन में यह घोषणा करने के लिए है :

std::map<int,std::string> SomeClass::myMap = std::map<int,std::string>(myComparator); 
+0

नाइटपिक: यह कक्षा में/घोषित/कार्यान्वित/परिभाषित/घोषित किया जाएगा। – Grault

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