1

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

我能做些什么来解决这个问题?有什么方法可以抑制这个错误吗?

4

1 回答 1

3

在 C++11中错误使用时有一个重大变化make_pair:如果您指定参数类型,则在 C++11 中的含义与在 C++03 中的不同。

要解决此问题,请将std::make_pair指定参数类型的更改更改为std::pair并保留其他所有内容。

或者,删除 的类型参数make_pair,因为您基本上不应该传递它们。但是,如果旧代码做一些古怪的事情,这可以改变事情的工作方式(在上述情况下,我认为它是安全的)。

然而,第一个解决方案将更接近 C++11 中的 C++03 行为,以防他们做了一些奇怪的事情,所以是最安全的。

std::make_pair没有<>他们,你应该独自离开。

这一重大变化与 C++11 中完美的转发效率改进和move仅支持类型有关。

于 2013-12-29T02:32:12.777 回答