Никакая функция соответствия для вызова к новому оператору

Я пытаюсь перенести класс из библиотеки, которой я пользуюсь в Lua. Specifially, я пытаюсь перенести цветной класс от 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::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*)’
:0: note: candidates are: void* operator new(unsigned int)
make: *** [game] Error 1

Я делаю подобные вещи в нескольких других местах, не сталкиваясь с этой ошибкой, таким образом, я не уверен, что вызвало бы ее. При рассмотрении исходного кода Цвета, я не вижу ничего странного или необычного, и у меня закончились идеи. Я также попытался использовать конструктора по умолчанию (т.е. никакие аргументы) и затем просто установить значение позже, но это не приносило пользы также.

31
задан Alex 2 July 2010 в 00:40
поделиться

1 ответ

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

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

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

79
ответ дан 27 November 2019 в 21:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: