web-dev-qa-db-ja.com

new演算子を呼び出すための一致する関数がありません

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のソースコードを見ると、奇妙なことや異常なことは何も見られず、アイデアが不足しています。また、デフォルトのコンストラクター(つまり、引数なし)を使用して、後で値を設定しようとしましたが、それでもうまくいきませんでした。

34
Alex

newの標準配置フォームを使用するには、_#include <new>_する必要があります。

使用しているnewの形式には、void* operator new(std::size_t, void*) throw();の宣言が必要です。

非配置newを使用するために_#include <new>_する必要はありません。

85
CB Bailey