【问题标题】:Lua errorPANIC: unprotected error in call to Lua API (attempt to call a nil value)Lua errorPANIC:调用 Lua API 时出现不受保护的错误(尝试调用 nil 值)
【发布时间】:2012-08-14 14:55:06
【问题描述】:

这是代码,执行时得到错误:“PANIC: unprotected error in call to Lua API (attempt to call a nil value)”

#include <stdio.h>
extern "C"{
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
};

lua_State *L;
int luaAdd(int x, int y)
{
int sum;
lua_getglobal(L, "add");
lua_pushnumber(L, x);
lua_pushnumber(L, y);
lua_call(L, 2, 1);
sum = (int)lua_tonumber(L, -1);
lua_pop(L, 1);
return sum;
}


int main(int argc, char *argv[])
{
  int sum = 0;
  L = lua_open();
  luaL_openlibs(L);
  luaL_dofile(L, "add.lua");
  sum = luaAdd(10, 15);
  printf("The sum is %d\n", sum);
  lua_close(L);

  return 0;
}

add.lua

function add(x, y) do
  return x + y
end
end

你能告诉我,我哪里错了。 提前致谢。

【问题讨论】:

  • 编译文件时是否出错?例如,Lua 真的 find add.lua 正确吗?
  • 我得到了答案,你无法图像,我把add.lua放在一个不正确的目录中,我把它放在cpp文件所在的目录中,当我把它放在项目目录中时,然后有用。谢谢@lhf 和尼可波拉斯。

标签: c++ lua


【解决方案1】:

你知道吗,我遇到了同样的问题并通过意识到从代码块运行某些东西时解决了它,它与磁盘上可执行文件所在位置的工作目录不同。从 cmd 运行以确保我有正确的工作目录时,确保我的 c++ 程序确实可以找到 lua 文件,并验证我的 lua 代码是否存在 ideone 错误,我能够成功运行。现在,您的问题可能是其他问题,但请至少尝试这些步骤,让我们知道它是怎么回事。

【讨论】:

    【解决方案2】:

    确保你的文件名是add.lua,而不是lua.add。因为我曾经把名字弄错了,而且出现的错误和你的一样。我改了之后正确,它起作用了。并且不要忘记将它与您的可执行文件放在同一目录中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-29
      • 2014-12-30
      • 2011-07-30
      • 2020-08-16
      • 1970-01-01
      • 2018-05-30
      • 2021-09-06
      • 1970-01-01
      相关资源
      最近更新 更多