调用operator new没有匹配函数

Ale*_*lex 31 c++ new-operator

我正在尝试从我在Lua中使用的库中包装一个类.特别是,我正在尝试从SFML中包装颜色类.在这里这里可以看到颜色类的完整源代码.

这就是我失败的功能.

int SFColor_new(lua_State* L)
{
    // omitting part where I set r, g, b, and a
    new (lua_newuserdata(L, sizeof(Color))) Color(r, g, b, a); // Line 47
    luaL_getmetatable(L, LuaInfo<Color>::myMetaTableName);
    lua_setmetatable(L, -2);
    return 1;
}
Run Code Online (Sandbox Code Playgroud)

这就是错误

LuaSFMLColor.cpp: In function ‘int ag::SFColor_new(lua_State*)’:
LuaSFMLColor.cpp:47: error: no matching function for call to ‘operator new(unsigned int, void*)’
<built-in>:0: note: candidates are: void* operator new(unsigned int)
make: *** [game] Error 1
Run Code Online (Sandbox Code Playgroud)

我在其他几个地方做类似的事情而没有遇到这个错误,所以我不确定是什么原因导致它.看看Color的源代码,我没有看到任何奇怪或不同寻常的东西,而且我已经没有想法了.我也尝试使用默认构造函数(即没有参数)然后只是设置值,但这也没有任何好处.

CB *_*ley 79

要使用new您必须的标准放置形式#include <new>.

new您正在使用的形式需要声明void* operator new(std::size_t, void*) throw();.

您不必#include <new>使用非展示位置new.

  • 这样做了.直到发布之前我才意识到这一点.它必须埋没在我一直在使用的其他标题中,而我却不知道.谢谢.:) 你每天学习新的东西.(双关语) (6认同)
  • +1。我从来不知道。也许很多 STL 标头都使用新的放置位置(出于相当明显的原因),而我自己从来不必手动 #include 它,但是如果您有一个没有矢量的文件,那么您可能需要手动包含它。 (2认同)