2010-07-01 11 views
19

Lua'da kullandığım bir kitaplıktan bir sınıf sarmayı deniyorum. Özellikle, renk sınıfını SFML'den kaydırmaya çalışıyorum. Renk sınıfı için tam kaynak here ve here görülebilir. Yeni işle ilgili çağrı için eşleme işlevi yok

Bu

.

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

ben başaramıyorum işte fonksiyonudur Ve bu hata

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 

olduğunu yapmam bu hatayla olmadan birkaç başka yerlerde benzer şeyler bu yüzden ona neyin sebep olacağından emin değilim. Colour'un kaynak koduna bakarak garip veya sıradan bir şey görmüyorum ve fikirlerden kaçtım. Ayrıca varsayılan yapıcıyı (yani argümanlar) kullanmayı denedim ve daha sonra değeri daha sonra ayarladım, ama bu da iyi bir şey yapmadı.

+1

Bu Lua ile ilgili değildir. – lhf

+0

O zamanlar bunu bilmiyordum. : P – Alex

cevap

59

new standart yerleşim formunu kullanmak için #include <new>'a sahip olmanız gerekir.

Kullandığınız new formu, void* operator new(std::size_t, void*) throw(); bildirimini gerektirir.

Yerleşimi new kullanmak için #include <new> yapmanıza gerek yoktur.

+0

+1. Bunu hiç bilmiyordum. Belki bir çok STL üstbilgisi yeni yerleşimi kullanır (daha açık nedenlerle) ve kendiminkine kendim eklememeliydim, ancak elinizde olmayan bir dosya varsa, vektör varsa, el ile eklemeniz gerekebilir. o. – Puppy

+3

Bunu yaptı. Bunu yayınlayana kadar hiç fark etmedim. Bilmeden kullanabileceğim diğer başlıkların bazılarında gömülü olmalı. Teşekkürler. :) Her gün yeni bir şeyler öğreniyorsunuz. (pun amaçlı) – Alex

+0

@Alex: punto için +1 =) – Cogwheel

İlgili konular