मेरे पास एमएसवीएस 2010 एसपी 1 के तहत एक परियोजना ठीक काम कर रही है। मैं इसे एमएसवीएस 2012 आरसी में बदलने की कोशिश कर रहा हूं। मुझे कुछ सामान बदलना पड़ा, मुख्य रूप से सी ++ हेडर/lib पथ और एमएफसी कस्टम सामान से संबंधित। लेकिन मुझे स्पष्ट करने के लिए एक आखिरी बाधा है।एमएसवीएस 2010 परियोजना को एमएसवीएस 2012 आरसी में कनवर्ट करना लेकिन त्रुटि प्राप्त करें "सी ++ मानक इस प्रकार के लिए हैश प्रदान नहीं करता है"
एमएसवीसी 2010 में, मैं unordered_map<basic_string<TCHAR>, int>
या map<basic_string<TCHAR>, int>
का उपयोग कर रहा हूं। यह ठीक संकलित करता है। लेकिन एमएसवीएस 2012 में, मुझे बस यह त्रुटि मिलती है: "सी ++ मानक इस प्रकार के लिए हैश प्रदान नहीं करता है"
नेट पर थोड़ी सी खोज करने के बाद, मुझे पता चला कि एमएसवीएस 2012 के करीब होना चाहिए सी ++ 11 मानक, और मानक केवल मूल प्रकारों और 4 परिभाषित स्ट्रिंग प्रकारों के लिए हैंश फ़ंक्शन को परिभाषित करता है (उनमें से string
और wstring
, लेकिन basic_string
शामिल नहीं है)। इसलिए मैंने सभी basic_string<TCHAR>
को wstring
में बदल दिया लेकिन इसका कोई फायदा नहीं हुआ ... मुझे अभी भी वही त्रुटि मिलती है।
मुझे अपने ऐप को फिर से संकलित करने में सक्षम होने के लिए क्या करना चाहिए?
शायद वीएस -2010 में आपके पास मल्टीबाइट अक्षम था इसलिए 'टीएचएआरएआर' को 'char' में मैप किया गया था और अब आपके पास मल्टीबाइट वर्ण सक्षम हैं ताकि' tCHAR' नक्शे 'wchar_t' पर सक्षम हो जाएं। प्रोजेक्ट गुणों में इन सेटिंग्स को बदलने का प्रयास करें। आपकी परियोजना सेटिंग्स के आधार पर – RedX
'basic_string' या तो 'std :: string' या' std :: wstring' (दोनों typedefs) है। सी ++ 11 में एकमात्र अंतर यह है कि स्ट्रिंग 'हैश <> 'अब' ' में है और '' नहीं है। –
धन्यवाद बो, मुझे हर जगह शामिल करना था, जबकि इससे पहले मुझे इसे करने की आवश्यकता नहीं थी। मुझे जवाब देने से पहले 6 घंटे इंतजार करना होगा ... इस बीच, इसे स्वयं करने के लिए स्वतंत्र महसूस करें :) –
OOEngineer