【发布时间】:2017-04-23 01:34:46
【问题描述】:
我正在尝试在 C++ 中使用 lua 状态,我需要从 C++ 传递一个 str,但是当我尝试调用我在 lua 中编写的函数时,我得到了错误 试图调用 nil 值。它直接编译到 lua 环境中,但是当我在其中输入表达式时,我得到了错误。
int main(int argc, char** argv){
lua_State *L;
L = luaL_newstate();
string buff;
const char* finalString;
luaL_openlibs(L);
luaL_dofile(L,argv[1]);
getline(cin, buff);
lua_getglobal(L, "InfixToPostfix");
lua_pushstring (L, buff.c_str());
lua_pcall(L, 1, 1, 0);
finalString = lua_tostring(L, -1);
printf("%s\n", finalString);
lua_close(L);
}
来自 lua 文件:
function InfixToPostfix(str)
print("before for loop")
for i in string.gmatch(str, "%S+") do
在显示错误之前不会到达打印输出
【问题讨论】:
-
我相信错误消息“尝试调用 nil 值”表示全局名称不存在,正如您拼写的那样。原因可能是名称拼写错误或函数声明位于全局以外的某个范围内。请参阅stackoverflow.com/questions/5559741/…,另请参阅stackoverflow.com/questions/20380232/… 和cc.byexamples.com/2008/06/21/…
-
另一个可能的原因是 Lua 文件包含语法错误。你应该检查
luaL_dofile的返回值。