gpt4 book ai didi

visual-c++ - 使用make_pair时在Visual Studio 2012中使用c2664

转载 作者:行者123 更新时间:2023-12-04 05:25:08 25 4
gpt4 key购买 nike

我挖了一个旧项目并想对其进行编译,但收到了一些错误,其中一些是c2664:

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,但这没有帮助。

它在VS2010中确实可以编译。

请帮助我找出造成此问题的原因以及解决方法。

最佳答案

VS2012中对 make_pair() 进行了更改,以支持称为移动语义的C++ 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)));

在VS2012之前,由于添加了一个名为 move semantics的新C++ 11功能,因此明确地为他们提供此类功能在VS2012之前可以正常工作。您将需要稍后阅读该主题,因为您拥有支持该主题的 Shiny 的新编译器。

关于visual-c++ - 使用make_pair时在Visual Studio 2012中使用c2664,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13902348/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com