c++lua设置全局变量时出错
c++ lua error on setting global variable
我有以下代码:
lua_State *lua;
lua = lua_open();
luaL_openlibs(lua);
std::string code = "print(gvar)n"
"function test()n"
"print(gvar)n"
"endn";
if(!luaL_loadstring(lua, code.c_str())){
if (lua_pcall(lua, 0, 0, 0)){
const char* error = lua_tostring(lua, -1);
lua_pop(lua, 1);
}
}
lua_pushstring(lua, "100");
lua_setglobal(lua, "gvar");
if (lua_pcall(lua, 0, 0, 0)){
const char* error = lua_tostring(lua, -1); // returns "attempt to call a nil value"
lua_pop(lua, 1);
}
lua_close(lua);
调用函数和获取全局变量很好,但当我尝试设置全局变量时,我会得到"尝试调用零值"。我不明白为什么?
if(!luaL_loadstring(lua, code.c_str())){
if (lua_pcall(lua, 0, 0, 0)){
const char* error = lua_tostring(lua, -1);
lua_pop(lua, 1);
}
}
此代码使用luaL_loadstring()
将字符串加载到一个匿名函数中,将其放入堆栈中,然后使用lua_pcall(lua, 0, 0, 0)
执行该函数。
lua_pushstring(lua, "100");
lua_setglobal(lua, "gvar");
if (lua_pcall(lua, 0, 0, 0)){
const char* error = lua_tostring(lua, -1); // returns "attempt to call a nil value"
lua_pop(lua, 1);
}
这段代码将字符串推送到堆栈上,然后设置全局变量gvar
。在调用lua_setglobal()
之后,堆栈上应该没有任何内容。var已经存在。
在那之后,您尝试用lua_pcall
调用堆栈顶部的函数,但堆栈是空的——这就是为什么您会得到attempt to call a nil value
消息。
相关文章:
- 在全局变量中保存类的实例以重新创建类(创建"backup")
- 当vector是tje全局变量时,c++中vector的内存管理
- std::threads可以从Windows DLL中的全局变量创建/销毁吗?
- 内联函数中具有内部链接的全局变量
- 如何在信号处理程序和普通函数中对全局变量进行互斥读写操作
- 全局变量 多读取器 一个写入器多线程安全?
- 如果全局变量默认是外部变量,为什么要添加"extern"关键字?
- 不同作用域中的静态变量和全局变量
- C++ 在编译时具有函数计算全局变量
- 修改程序的入口点时未调用全局变量的构造函数
- 使用 std::ios_base::Init 正确初始化全局变量
- 为什么我的全局变量似乎没有变化?
- C ++程序如何返回我的数组或写入全局变量
- 为什么我的数组值与此处的全局变量不匹配?
- QT C++中对全局变量的未定义引用
- 跨多个类的全局变量而不会出现重定义错误?
- 赋予全局变量而不是局部变量优先级的函数 - (异常行为)
- 尝试使用全局变量时使用 Xcode C++时出错
- 在 llvm 中创建全局变量时出错
- c++lua设置全局变量时出错