2010-07-01 11 views
19

Sto provando a racchiudere una classe da una libreria che sto utilizzando in Lua. Specificamente, sto provando a racchiudere la classe di colore da SFML. L'origine completa per la classe di colori può essere vista here e here.Nessuna funzione corrispondente per la chiamata all'operatore new

Questa è la funzione che è che io sto venendo meno.

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; 
} 

E questo è l'errore

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 

faccio cose simili in pochi altri posti senza incorrere in questo errore, quindi non sono sicuro di cosa lo causerebbe. Guardando il codice sorgente del colore, non vedo nulla di strano o fuori dall'ordinario, e ho esaurito le idee. Ho anche provato ad usare il costruttore di default (cioè senza argomenti) e poi solo a settare il valore in seguito, ma anche questo non ha funzionato.

+1

Questo non è correlato a Lua. – lhf

+0

Non lo sapevo al momento. : P – Alex

risposta

59

Per utilizzare il modulo di inserimento standard di new è necessario #include <new>.

Il modulo di new che si sta utilizzando richiede una dichiarazione di void* operator new(std::size_t, void*) throw();.

Non è necessario #include <new> utilizzare il non posizionamento new.

+0

+1. Non l'ho mai saputo. Forse molte intestazioni STL usano il posizionamento nuovo (per ragioni piuttosto ovvie) e non ho mai dovuto includerlo manualmente, ma se avessi un file in cui non avevi, per esempio, il vettore, potresti dover includere manualmente esso. – Puppy

+3

Questo ha funzionato. Non me ne sono mai reso conto fino a quando non è stato pubblicato. Deve essere seppellito in alcune delle altre intestazioni che ho usato senza che io lo sapessi mai. Grazie. :) Si impara qualcosa di nuovo ogni giorno. (gioco di parole) – Alex

+0

@Alex: +1 per gioco =) – Cogwheel

Problemi correlati