我正在尝试使用vstgui 4.0为vst插件制作一个非常简单的gui。我正在使用Visual Studio 2012 Express。当我构建它时,我从其中一个sdk文件中收到错误。错误是:
error C2664: 'std::make_pair' : cannot convert parameter 1 from 'const VSTGUI::CViewAttributeID' to 'VSTGUI::CViewAttributeID &&' c:\sdks\vst3 sdk\vstgui4\vstgui\lib\cview.cpp 691 1 VST
它来自cview.cpp中的'attributes.insert ...'行:
bool CView::setAttribute (const CViewAttributeID id, const int32_t inSize, const void* inData)
{
if (inData == 0 || inSize <= 0)
return false;
CViewAttributeConstIterator it = attributes.find (id);
if (it != attributes.end ())
it->second->updateData (inSize, inData);
else
attributes.insert (std::make_pair<CViewAttributeID, CViewAttributeEntry*> (id, new CViewAttributeEntry (inSize, inData)));
return true;
}
我该怎么做才能解决这个问题?有什么方法我应该压制这个错误吗?
答案 0 :(得分:3)
在C ++ 11中使用错误时,make_pair
发生了重大变化:如果指定参数类型,则表示C ++ 11中的内容与C ++ 03中的内容不同。
要解决此问题,请将指定参数类型的std::make_pair
更改为std::pair
,并将其他所有内容保留。
或者,删除make_pair
的类型参数,因为您基本上不应该传递它们。但是,如果旧代码变得古怪(在上面的例子中我认为是安全的),这可以改变工作方式。
然而,第一个解决方案将模仿C ++ 03中更接近C ++ 03的行为,以防它们做了一些奇怪的事情,所以最安全。
std::make_pair
没有<>
之后,你应该独自离开。
这一重大变化与C ++ 11中完美的转发效率改进和仅支持move
类型有关。