我一直在将Lua集成编写到游戏项目中,令人沮丧的是,每次尝试使用lua_pcall时,都会出现错误“试图调用nil值”。
当我尝试查找错误时,大多数示例都是那些在加载lua文件后忘记使用pcall的人,或者是某些错误。但是对我来说,这是我什至尝试加载lua标准库的时间。我不明白为什么用这么少的代码来显示是怎么回事。我尝试过的其他事情是跳过openLibs并直接使用doFile加载我的文件,但是即使在那种情况下,我所做的任何事情都将导致nil错误。
非常感谢您的帮助。
编辑:
由于有了一些帮助,我确定我不需要对luaL_openlibs进行调用,但是正如我上面所写的,尝试运行任何函数都会导致错误。在这种情况下,它无法在全局lua命名空间中找到“ init”
c ++
void LuaScriptingInterface::init()
{
m_luaState = std::shared_ptr<lua_State>(luaL_newstate());
luaL_openlibs(m_luaState.get());
if (luaL_dostring(m_luaState.get(), m_script.c_str())) // script below
{
const char* errStr = lua_tostring(m_luaState.get(), -1);
ASSERT(false, errStr ); // not hitting this case
}
lua_getglobal(m_luaState.get(), "init");
if (!lua_isfunction(m_luaState.get(), -1))
{
ASSERT(false); // hit this case! Why can't we find "init"?
}
}
lua
init function ()
end
update function (dt)
end
它当然不会做任何事情,但是我希望它至少应该能够找到该功能。
答案 0 :(得分:0)
有趣的是,问题出在我的FileReader代码中,其中省略了换行符