Inc*_*bus 8 visual-c++ std-pair visual-studio-2012
我挖了一个旧项目并想编译它,但收到了几个错误,其中一些是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 &&'
Run Code Online (Sandbox Code Playgroud)
相关的代码部分是:
//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)));
//...
}
Run Code Online (Sandbox Code Playgroud)
我试图制作函数参数const
,但这没有帮助.
它确实在VS2010中编译得很好.
请帮我找到导致此问题的原因以及解决方法.
Sea*_*ine 17
make_pair()
已经在VS2012中进行了更改,以支持称为移动语义的新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)));
Run Code Online (Sandbox Code Playgroud)
由于添加了一个名为移动语义的新C++ 11特性,因此在VS2012之前明确地提供它们会很好.稍后您会想要阅读该主题,因为您有一个支持它的闪亮的新编译器.
归档时间: |
|
查看次数: |
5787 次 |
最近记录: |