LuaBridge getGlobal总是返回零

时间:2015-08-26 09:51:51

标签: c++ lua luabridge

我在1周前与LuaBridge进行了第一次小测试,并且从剧本中获得了一个int。

现在我删除了这段代码并尝试在我的游戏引擎中包含Lua脚本,但它已不再有效。 我试着用这个回到基本代码:

#include <iostream>

#include "lua5.2/lua.hpp"
#include "LuaBridge/LuaBridge.h"

using namespace luabridge;


int main()
{
    lua_State* L;
    L = luaL_newstate();

    if(!luaL_loadfile(L, "../../script.lua"))
        std::cout << "failed loading" << std::endl;

    LuaRef s = getGlobal(L, "nmbr");
    int luaInt = s.cast<int>();
    std::cout << luaInt << std::endl;

    return 0;
}

使用此脚本

nmbr = 30

它给了我:

PANIC: unprotected error in cell to Lua API (bad argument #2 (number expected, got nil))
Aborted (core dumped)

当我尝试从脚本中获取字符串或函数时我也一样,我不知道我在这方面做错了什么。

感谢您的回答:)

2 个答案:

答案 0 :(得分:2)

来自luaL_loadfileex的文档:

  

作为lua_load,此函数仅加载块;它没有运行它。

这意味着脚本已加载,但尚未执行,因此实际上没有变量nmbr。您需要先运行脚本才能使代码生效(例如,通过调用lua_call)。

在第一个简单示例in this LuaBridge tutorial中很好地展示了这一点。

答案 1 :(得分:1)

luaL_loadfile〜= luaL_dofile。您加载脚本并将其作为堆栈上的函数获取但不执行它,因此不会发生全局赋值。