gpt4 book ai didi

C++ & Lua - 尝试索引 nil 值错误

转载 作者:搜寻专家 更新时间:2023-10-31 01:46:13 24 4
gpt4 key购买 nike

我目前正在学习如何让 Lua 与 C++ 一起工作,我偶然发现了这个问题。这是我目前正在使用的小应用程序:

#include <lua.5.2.3\src\lua.hpp>
#include <iostream>
#include <string>

int pluacall(lua_State *L){
std::cout << "Called from inside Lua." << std::endl;
return 0;
}

int main(){
std::string x;
lua_State *L = luaL_newstate();
luaL_openlibs(L);

luaL_Reg _funcs[] = { { "CppFunc", pluacall }, {} };

if (luaL_dofile(L, "test.lua")){
std::cout << "Error: " << lua_tostring(L, -1) << std::endl;
lua_pop(L, 1);
}

luaL_setfuncs(L, _funcs, 0);

lua_getglobal(L, "sup");
if (lua_pcall(L, 0, 0, 0)){
std::cout << "Error: " << lua_tostring(L, -1) << std::endl;
lua_pop(L, 1);
}


std::cout << "Test";
std::getline(std::cin, x);

lua_close(L);
return 0;
}

在我添加 luaL_setfuncs(...) 之前,一切都完美无缺。

现在应用程序崩溃并出现以下错误:

PANIC:调用 Lua API 时发生未 protected 错误(尝试索引 nil 值)

老实说,我完全不知道为什么它不起作用或者这个错误甚至意味着什么(谷歌今天不是我的 friend )。有什么想法吗?

可能还值得一提的是,我没有将 Lua 库链接到我的应用程序,而是将它们编译在一起(所有 Lua 源都添加到项目中)

编辑:这是我正在测试的 Lua 脚本

function sup()
io.write("Hey.\n")
CppFunc()
return 1
end

最佳答案

void luaL_setfuncs (lua_State *L, const luaL_Reg *l, int nup);

将数组 l 中的所有函数(参见 luaL_Reg)注册到堆栈顶部的表中(在可选的上值下方,参见下一个)。


void luaL_newlib (lua_State *L, const luaL_Reg *l);

创建一个新表并在其中注册列表 l 中的函数。它作为以下宏实现:

 (luaL_newlibtable(L,l), luaL_setfuncs(L,l,0))

要么在 luaL_setfuncs 之前插入 luaL_newlibtable(L, _funcs),要么使用 luaL_newlib(L, _funcs)。如果您不想将函数注册到单独的表中,而是注册到全局命名空间中,您可以使用以下方法:

lua_pushvalue(L, LUA_GLOBALSINDEX); // push _G table
luaL_setfuncs(L, _funcs, 0); // set funcs on _G
lua_pop(L, 1); // pop _G

关于C++ & Lua - 尝试索引 nil 值错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20962634/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com