2012-05-06 16 views
6

निम्नलिखित कोड जीसीसी-4.5.1 के साथ संकलित लेकिन दृश्य स्टूडियो 11.दृश्य स्टूडियो 11 संकलन समय त्रुटि :: नक्शा

#include <map> 
#include <array> 

typedef std::pair<const unsigned int, std::array<const unsigned int, 4>> pairus; 

int main(){ 

    std::map<const unsigned int, std::array<const unsigned int, 4> > x; 
    std::array<const unsigned int, 4> troll = {1, 2, 3, 4}; 
    x.insert(pairus(1, troll)); 

    auto z = x[1]; 
} 

1 में नहीं अब std::array<> troll को मैप किया है। सम्मिलन अच्छी तरह से काम करता है और कार्यक्रम संकलित करता है।

error C2512: 'std::array<_Ty,_Size>::array': कोई उचित डिफ़ॉल्ट उपलब्ध निर्माता

क्या कारण> इसलिए ट्रोल कि 1 को मैप किया है सरणी प्राप्त करने की कोशिश, कार्यक्रम निम्न त्रुटि के साथ संकलन नहीं करता है - लेकिन, जैसे ही मैं auto z = x[1] कोशिश जीसीसी और बनाम 11 के बीच व्यवहार में यह अंतर और इसे कैसे ठीक किया जाए?

धन्यवाद।

+0

क्या आप सुनिश्चित हैं कि 'जोड़ी' 'make_pair' नहीं होनी चाहिए? (ऐसा मत सोचो कि यह आपकी समस्या है) – Corbin

+0

हाँ यह टाइपस के प्रकार के साथ बस ठीक काम करता है std :: pair <>। यह अजीब कंपाइलर व्यवहार मुझे बोनकर्स चला रहा है। – ScarletAmaranth

+0

जोड़ीस कैसा दिखता है (मान लीजिए कि यह एक कस्टम फ़ंक्शन है या यह एमएसवीसी ++ के make_pair का उपनाम है?)। मुझे संदेह है कि समस्या जोड़ी में झूठ बोल सकती है क्योंकि आपके द्वारा पोस्ट किए गए कोड में कहीं भी डिफ़ॉल्ट कन्स्ट्रक्टर की आवश्यकता नहीं है। (यद्यपि आपने एक डिफ़ॉल्ट ctor की आवश्यकता होगी यदि आपने x [k] किया था जहां k मानचित्र में नहीं है।) – Corbin

उत्तर

4

इसके बजाय auto z = *x.find(1); आज़माएं। [] -operator को एक डिफ़ॉल्ट-रचनात्मक प्रकार की आवश्यकता होती है। वास्तव में, पूरे कंटेनर को एक डिफ़ॉल्ट-रचनात्मक प्रकार की आवश्यकता होती है, इसलिए आप वास्तव में कुछ कार्यान्वयन की कोशिश करते समय यादृच्छिक भाग्य के अलावा कुछ भी उम्मीद नहीं कर सकते हैं।

+0

आप एक प्रतिभाशाली हैं! :) काम करता है! :) जीसीसी कुछ आर्केन जादू जानना प्रतीत होता है। धन्यवाद;) – ScarletAmaranth

+0

सुनिश्चित नहीं है कि डिफ़ॉल्ट कंटेनर आवश्यकता पूरे कंटेनर के लिए खड़ी है अब सी ++ 11 पास हो गया है। नए मानचित्र को जंगम प्रकारों को पकड़ने में सक्षम होना चाहिए, लेकिन केवल कुछ कार्यक्षमता उनके लिए उपलब्ध है। [] ऑपरेटर मुझे नहीं लगता है। –

3

आपका प्रकार असाइन करने योग्य नहीं है क्योंकि इसमें स्थिरांक शामिल हैं।

x [1] असाइन करने योग्य संदर्भ को वापस करने का प्रयास करता है। यह कुंजी के लिए खाली मूल्य भी बनाएगा यदि यह अभी तक नहीं है। ये दोनों आपके प्रकार के साथ अमान्य हैं। आपको इसके बजाय खोज का उपयोग करना होगा।

+0

क्यों पृथ्वी पर gcc चीज संकलित करेंगे :)? – ScarletAmaranth

+0

मानक केवल यह बताता है कि क्या आवश्यक है, यह यह नहीं बताता कि क्या अनुमति है। जीसीसी कार्यान्वयन कार्यों में से कुछ तरीके से आपके विशेष मामले में एक ही समस्या नहीं होती है। यह करने के लिए स्वतंत्र है। यहां कोई नैदानिक ​​आवश्यकता नहीं है। –

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