2010-07-01 51 views
19

我试图从我在Lua中使用的库中包装一个类。特别是,我试图从SFML中包装颜色类。颜色等级的完整来源可见herehere呼叫运营商没有匹配的功能新

这是这是我在我失败的功能。

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; 
} 

这是错误

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 

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

+1

这与Lua无关。 – lhf 2010-07-01 11:52:23

+0

我当时不知道。 :P – Alex 2010-07-02 00:40:25

回答

59

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

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

您不必#include <new>使用非放置new

+0

+1。我从来不知道这一点。也许很多STL头文件使用放置新文件(出于相当明显的原因),我从不必自己手动包括它,但是如果你有一个你没有的文件,比如矢量,那么你可能需要手动包含它。 – Puppy 2010-07-01 10:21:46

+3

这是做到了。我从来没有意识到,直到这张贴。它必须被埋在我一直使用的其他标题中,而不会知道。谢谢。 :) 你每天学习新的东西。 (双关语意思) – Alex 2010-07-01 10:23:38

+0

@Alex:+1双关语=) – Cogwheel 2010-07-01 15:20:49

相关问题