2011-11-04 19 views
8

मैं अपने सी में निम्न त्रुटि हो रही है ++ कार्यक्रम:कोई उचित डिफ़ॉल्ट निर्माता उपलब्ध

static std::map<const std::string, Timezone> timezoneMap; 
:

1>   c:\users\thom\documents\cworkspace\barnaby\barnaby\timezone.cpp(14) : see reference to class template instantiation 'std::map<_Kty,_Ty>' being compiled 

इस कोड की इस पंक्ति को त्रुटि ढेर लेकिन अंक में थोड़ा नीचे है

कारण यह है कि टाइमज़ोन का एक विस्तृत निर्माता है, लेकिन कोई डिफ़ॉल्ट कन्स्ट्रक्टर नहीं है।

c:\program files\microsoft visual studio 10.0\vc\include\map(215): error C2512: 'Timezone::Timezone' : no appropriate default constructor available 

1> ग: \ Program Files \ Microsoft Visual Studio 10.0 \ vc \ \ मानचित्र (210) शामिल हैं: वर्ग टेम्पलेट सदस्य समारोह संयोजित करते समय 'समय-क्षेत्र & std :: नक्शा < यहाँ त्रुटि का वह हिस्सा है _Kty, _Ty> :: ऑपरेटर [] (कॉन्स std :: basic_string < _Elem, _Traits, _Ax> &) '

मेरा प्रश्न है, क्यों? नक्शा टाइमज़ोन ऑब्जेक्ट बनाने का प्रयास क्यों कर रहा है? अगर मैं हमेशा अपने मानचित्र में पूरी तरह से गठित वस्तुओं को रखता हूं तो इसकी आवश्यकता क्यों होनी चाहिए? विशेष रूप से, जब मैं मानचित्र को प्रारंभ करता हूं तो यह त्रुटि क्यों होती है?

उत्तर

12

आप शायद का उपयोग कर रहे map के operator[] जो डिफ़ॉल्ट निर्माता की आवश्यकता होती है (अगर यह नहीं किया था, यह कैसे इस मामले में जहां कुंजी नक्शा में मौजूद नहीं है संभाल होगा?)। यदि आप insert का उपयोग करते हैं तो आप एक प्रदान नहीं कर पाएंगे (मुझे याद नहीं है कि मानक को सभी मानचित्रों के लिए डिफ़ॉल्ट कन्स्ट्रक्टर की आवश्यकता होती है, या जब आप उस ऑपरेटर का उपयोग करते हैं)।

+1

+1 अच्छी चीजें। ध्यान दें कि 'std :: map ' के साथ 'स्पष्ट Foo :: Foo (int)' केवल कन्स्ट्रक्टर और स्पष्ट प्रतिलिपि निर्माता के साथ, आप हमेशा 'm.insert (std :: make_pair (1, 5)) कह सकते हैं; ', लेकिन आप केवल 'm.insert (std :: make_pair (1, Foo (5)) कह सकते हैं; ~ C++ 11 में। –

1

मानचित्र ऑब्जेक्ट को एक डिफ़ॉल्ट कन्स्ट्रक्टर की आवश्यकता होती है जब आप संरचना का उपयोग करते हुए [] (मेरा पिछला स्पष्टीकरण अर्थहीन - माफ करना) के रूप में इतना गहरा था। देखें: Why does the C++ map type argument require an empty constructor when using []?

+0

यह गलत लगता है। कोई वस्तु "अदृश्य रूप से" बनाई गई है। नक्शा केवल एक वस्तु बनाता है जब आप इसे स्पष्ट रूप से चाहते हैं। –

+0

आप सही हैं। मैंने पूरी तरह से यह नहीं कहा कि मेरा क्या मतलब है। @ मार्क-बी ने किया। – drdwilcox

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