Подтвердить что ты не робот

Нет подходящей функции для вызова оператора 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, я не вижу ничего странного или необычного, и у меня заканчиваются идеи. Я также попытался использовать конструктор по умолчанию (т.е. Никаких аргументов), а затем просто установил значение после этого, но это тоже не принесло пользы.

4b9b3361

Ответ 1

Чтобы использовать стандартную форму размещения new, вы должны #include <new>.

Форма new, которую вы используете, требует объявления void* operator new(std::size_t, void*) throw();.

Вам не нужно #include <new> использовать не-размещение new.