2012-02-24 6 views
5

एक बहुत ही बुनियादी सवाल मैं लगता है:luabind: प्रिंट जैसे बुनियादी lua कार्यों कॉल नहीं कर सकता, toString

सी ++ कोड, lua बुला इस तरह दिखता है:

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

अब test.lua है निम्नलिखित सामग्री:

test.lua:2: attempt to call global 'print' (a nil value) 
:

function main() 
print "1" 
end 

निष्पादन पर मैं त्रुटि प्राप्त

समस्या क्या है? यह वातावरण के साथ कुछ करने के लिए है? मैंने सोचा कि प्रिंट जैसे कार्यों को वैश्विक पर्यावरण में परिभाषित किया गया है। तब यह क्यों नहीं मिला?

बहुत बहुत धन्यवाद।

+0

ठीक है, मैं यह पता लगा: luaopen_base (m_L); lua_open() –

+0

के बाद आपको कॉल करने की आवश्यकता है, यदि आप लुआ लाइब्रेरी में उपयुक्त निर्मित खोलने के लिए luaopen_string (m_L), luaopen_math (m_L), आदि को कॉल करने की आवश्यकता होगी, तो यदि आप उन लोगों का उपयोग करने की योजना बना रहे हैं। –

+0

@ chris.schuette: आपको या तो अपने स्वयं के प्रश्न का उत्तर देना चाहिए और उस उत्तर को स्वीकार करना चाहिए (इस प्रकार प्रश्न को समाप्त होने के रूप में चिह्नित करना) या प्रश्न को हटा देना चाहिए। –

उत्तर

6

जैसा कि आपने इसे समझ लिया है, आपको पर print और अन्य मूल कार्यों को प्राप्त करने के लिए कॉल करना होगा। तो फिर तुम luaopen_string, luaopen_math कॉल करने के लिए, में बुनियादी मॉड्यूल और कार्यों प्राप्त करने की आवश्यकता यह सब मैन्युअल रूप से लिखने के बजाय, luaL_openlibs साथ एक ही बार में सभी लुआ आधार समारोह लोड कर सकते हैं:।

lua_State* m_L = luaL_newstate(); 
luaL_openlibs(m_L); 
संबंधित मुद्दे