VSTGUI 4.0 - 错误C2664:'std :: make_pair'

时间:2013-12-29 01:22:36

标签: c++ vst

我正在尝试使用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;
}

我该怎么做才能解决这个问题?有什么方法我应该压制这个错误吗?

1 个答案:

答案 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类型有关。