2012-12-16 32 views
6

का उपयोग कर रहा एक पुराने परियोजना की खुदाई और यह संकलन चाहता था, लेकिन प्राप्त कई त्रुटियाँ, एक c2664 जा रहा है उन लोगों में से कुछ:c2664 जब make_pair

error C2664: 'std::make_pair' : cannot convert parameter 1 from 'CUser *' to 'CUser *&&' 
error C2664: 'std::make_pair' : cannot convert parameter 1 from 'unsigned long' to ' unsigned long &&' 

प्रासंगिक कोड भागों हैं:

//typedef for the userdata map 
typedef std::map<unsigned long, std::pair<CUser*,userstatus*>> UserDataMapType; 
//... 
Inc::incret CUserManager::AddUser(unsigned long ID, CUser* pUser, userstatus* pUserStatus) 
{ 
    //... 
    std::pair<UserDataMapType::iterator, bool> ret = m_mapUserData.insert(std::make_pair<unsigned long, std::pair<CUser*, userstatus*>>(ID, std::make_pair<CUser*, userstatus*>(pUser, pUserStatus))); 
    //... 
} 

मैंने फ़ंक्शन पैरामीटर const बनाने की कोशिश की, लेकिन इससे मदद नहीं मिली।

यह वीएस -2010 में बस ठीक है।

कृपया मुझे यह जानने में सहायता करें कि इसका क्या कारण है और इसे कैसे हल किया जाए।

उत्तर

16

make_pair() VS2012 में बदल दिया गया है एक नया सी ++ 11 सुविधा का समर्थन करने के लिए बुलाया चाल अर्थ विज्ञान और मुझे लगता है कि स्पष्ट रूप से make_pair() के लिए प्रकार का उल्लेख तरह से हो रही है।

याद रखें कि make_pair() को स्पष्ट रूप से निर्दिष्ट किए जाने वाले किसी भी टेम्पलेट पैरामीटर की आवश्यकता नहीं है। यह उन्हें प्रत्येक तर्क के प्रकार से हटा देता है।

make_pair() तो तरह के दोनों कॉल से स्पष्ट टेम्पलेट तर्क निकालने का प्रयास करें ...

std::pair<UserDataMapType::iterator, bool> ret = m_mapUserData.insert(std::make_pair(ID, std::make_pair(pUser, pUserStatus))); 

स्पष्ट रूप से उन्हें इस तरह प्रदान करने की वजह से एक नई सी ++ 11 सुविधा कहा जाता है ठीक पूर्व VS2012 काम किया है | move semantics। आप उस विषय पर बाद में पढ़ना चाहेंगे क्योंकि आपके पास एक चमकदार नया कंपाइलर है जो इसका समर्थन करता है।