2012-02-24 9 views
5

bir çok temel bir soru sanırım:luabind: print gibi temel lua işlevlerini arayamaz, toString

C++ kodu, lua çağırarak şöyle

:

lua_State* m_L; 
m_L = lua_open(); 
luabind::open(m_L); 
luaL_dofile(m_L, "test.lua"); 
try { 
    luabind::call_function<void>(m_L, "main"); 
} catch (luabind::error& e) { 
    std::string error = lua_tostring(e.state(), -1); 
    std::cout << error << std::endl; 
} 
lua_close(m_L); 

şimdi test.lua vardır aşağıdaki içeriği:

test.lua:2: attempt to call global 'print' (a nil value) 
: yürütme üzerine

function main() 
print "1" 
end 

hatası almak

Sorun nedir? Ortamlarla ilgisi var mı? Baskı gibi işlevlerin küresel ortamda tanımlandığını düşündüm. O zaman neden bulunamadı?

Çok teşekkür ederim.

+0

tamam anladım: luaopen_base (m_L); lua_open() –

+0

'dan sonra çağrılması gerekenler, luaopen_string (m_L), luaopen_math (m_L) vb. öğelerini çağırmak zorundasınız. –

+0

@ chris.schuette: Kendi sorunuzu cevaplamalısınız ve bu cevabı kabul etmelisiniz (böylece soruyu tamamlandı olarak işaretleyiniz) veya soruyu silin. –

cevap

6

Bunu düşündüğünüz gibi, print ve diğer temel işlevleri almak için luaopen_base numaralı telefonu aramanız gerekir. Sonra temel modülleri ve işlevleri almak için luaopen_string, luaopen_math aramaya gerek yerine elle hepsini yazma, luaL_openlibs ile tek seferde Lua baz fonksiyonu yükleyebilirsiniz.

lua_State* m_L = luaL_newstate(); 
luaL_openlibs(m_L);