C++调用lua,执行时出错

good90 2012-08-18 07:43:40
执行时出错,提示: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)
return x + y
end

...全文
265 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
good90 2012-08-21
  • 打赏
  • 举报
回复
thankyou,问题已解决,add.lua要放到project相应目录中。
[Quote=引用 4 楼 的回复:]

我用lua-5.2.1开发库在gcc下编译运行成功:
The sum is 25
C/C++ code

#include <stdio.h>
#include <lua.h>
#include <lualib.h>
#include <lauxlib.h>

static lua_State *L;

int luaAdd(int x, int y)
{
int sum;

……
[/Quote]
wZi 2012-08-19
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

引用 5 楼 的回复:

add.lua

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


这部分是函数么?


。。。我看不是很懂。。
我写的话会是这样

int luaAdd(int x,int y)
{
return x+y;
}

这位大侠不知道LUA脚本的语法
[/Quote]

是哈。确实不懂。没接触过。
herman~~ 2012-08-18
  • 打赏
  • 举报
回复
attempt to call a nil value

出现这种情况一般是 CPP和lua的函数名没匹配
羽飞 2012-08-18
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

add.lua

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


这部分是函数么?


。。。我看不是很懂。。
我写的话会是这样

int luaAdd(int x,int y)
{
return x+y;
}
[/Quote]
这位大侠不知道LUA脚本的语法
wZi 2012-08-18
  • 打赏
  • 举报
回复
add.lua

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


这部分是函数么?


。。。我看不是很懂。。
我写的话会是这样

int luaAdd(int x,int y)
{
return x+y;
}
图灵狗 2012-08-18
  • 打赏
  • 举报
回复
我用lua-5.2.1开发库在gcc下编译运行成功:
The sum is 25

#include <stdio.h>
#include <lua.h>
#include <lualib.h>
#include <lauxlib.h>

static 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 = luaL_newstate();
luaL_openlibs(L);
luaL_dofile(L, "1.lua");
sum = luaAdd(10, 15);
printf("The sum is %d\n", sum);
lua_close(L);

return 0;
}
good90 2012-08-18
  • 打赏
  • 举报
回复
I know.
good90 2012-08-18
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

你写的是啥。。。
[/Quote]

C++中调用lua,有错么?
wZi 2012-08-18
  • 打赏
  • 举报
回复
你写的是啥。。。

64,681

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧