2010-07-01 3 views
19

Я пытаюсь обернуть класс из библиотеки, которую я использую в Lua. В частности, я пытаюсь обернуть класс цвета из SFML. Полный источник для класса цвета можно увидеть here и here.Нет подходящей функции для вызова оператора new

Это функция, это что я неудачу в.

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

+0

Я не знал этого в то время. : P – Alex

ответ

59

Для использования стандартной формы размещения new вы должны указать #include <new>.

Для получения формы new требуется декларация из void* operator new(std::size_t, void*) throw();.

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

+0

+1. Я этого никогда не знал. Возможно, многие заголовки STL используют новое место размещения (по довольно очевидным причинам), и мне никогда не приходилось # включать его вручную, но если у вас был файл, в котором у вас не было, скажем, вектора, то вам может потребоваться вручную включить Это. – Puppy

+3

Это сделало это. Я никогда не осознавал этого, пока это не было опубликовано. Он должен быть похоронен в некоторых других заголовках, которые я использовал, не зная меня. Благодарю. :) Ты узнаешь что-то новое каждый день. (каламбур) – Alex

+0

@Alex: +1 для каламбура =) – Cogwheel

Смежные вопросы