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;
}
そしてこれはエラーです
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のソースコードを見ると、奇妙なことや異常なことは何も見られず、アイデアが不足しています。また、デフォルトのコンストラクター(つまり、引数なし)を使用して、後で値を設定しようとしましたが、それでもうまくいきませんでした。
new
の標準配置フォームを使用するには、_#include <new>
_する必要があります。
使用しているnew
の形式には、void* operator new(std::size_t, void*) throw();
の宣言が必要です。
非配置new
を使用するために_#include <new>
_する必要はありません。