使用C ++中的Lua,无法打开并显示Nil错误的标准库

时间:2019-05-02 01:17:54

标签: c++ lua scripting

我一直在将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

它当然不会做任何事情,但是我希望它至少应该能够找到该功能。

1 个答案:

答案 0 :(得分:0)

有趣的是,问题出在我的FileReader代码中,其中省略了换行符