2010-07-01 18 views
19

Estoy tratando de ajustar una clase de una biblioteca que estoy usando en Lua. Específicamente, estoy intentando envolver la clase de color de SFML. La fuente completa para la clase de color se puede ver here y here.No hay función de coincidencia para llamar al operador nuevo

Esta es la función de eso es que estoy fallando en.

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

Y este es el error

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 

que hacer cosas similares en algunos otros lugares sin caer en este error, así que no estoy seguro de qué lo estaría causando. Al mirar el código fuente de Color, no veo nada raro o fuera de lo común, y me quedo sin ideas. También intenté usar el constructor predeterminado (es decir, sin argumentos) y luego establecer el valor después, pero tampoco sirvió de nada.

+1

Esto no está relacionado con Lua. – lhf

+0

No lo sabía en ese momento. : P – Alex

Respuesta

59

Para usar la forma de colocación estándar de new, tiene que #include <new>.

La forma de new que está utilizando requiere una declaración de void* operator new(std::size_t, void*) throw();.

No necesita #include <new> para utilizar la no colocación new.

+0

+1. Nunca lo supe. Tal vez muchos de los encabezados STL utilizan la ubicación nueva (por razones bastante obvias) y nunca tuve que #incluirlo manualmente, pero si tuvieras un archivo donde no tuvieras, por ejemplo, vector, entonces podrías necesitar incluir manualmente eso. – Puppy

+3

Esto lo hizo. Nunca me di cuenta hasta que esto fue publicado. Debe ser enterrado en algunos de los otros encabezados que he estado usando sin que yo lo sepa. Gracias. :) Tu aprendes algo nuevo cada dia. (juego de palabras intencionado) – Alex

+0

@Alex: +1 para juego de palabras =) – Cogwheel

Cuestiones relacionadas