के रूप में प्रारंभ करें मेरे पास static map
है जो private
डेटा सदस्य है। मैं इसे कार्यान्वयन फ़ाइल में कैसे प्रारंभ करूं ताकि प्रारंभिक कंटेनर खाली हो जाएं? यह const
नहीं है। यह महत्वपूर्ण है कि इस कंटेनर में शुरुआत में कुछ भी नहीं है।खाली एक स्थिर निजी मानचित्र को
उत्तर
हैडर:
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
आप एक आरंभीकरण उपयोग कर सकते हैं:
कैसे इस बारे में (अगर मैं तुम्हें सही ढंग से समझ):
std::map<T,T2> YourClass::YourMember = std::map<T,T2>();
या बस 'std :: map
@MikeSeymour: बिल्कुल। बस यह स्पष्ट करना कि आप कन्स्ट्रक्टर तर्क दे सकते हैं यदि आप चाहते थे। – Linuxios
यदि आप वर्ग परिभाषा में परिभाषित है, तो आप कार्यान्वयन में यह घोषणा करने के लिए है :
std::map<int,std::string> SomeClass::myMap = std::map<int,std::string>(myComparator);
नाइटपिक: यह कक्षा में/घोषित/कार्यान्वित/परिभाषित/घोषित किया जाएगा। – Grault
यह कहता है कि मेरा नक्शा निजी है और इसलिए मेरी सीसी फ़ाइल के शीर्ष पर डिफ़ॉल्ट प्रारंभिकता अमान्य है। –
अपना कोड पोस्ट करें, आप कहीं गलती कर रहे हैं। –
मुझे अपने टाइपपीफ को सार्वजनिक रूप से ले जाना पड़ा, लेकिन मेरे सदस्य को निजी रखा। यह तय है। –