1

我有一个奇怪的问题,从 C++ 调用 Lua 函数。我在 Lua 中有:

Player = 
{
    Number = 0.43,
    Text = "SomeText",
}

function Player:Func(a, b)  
    return (a * b);
end

在 lua_pcall 我的堆栈看起来:
table
function
3
4

我调用这个函数:

lua_pcall(L, 2, 1, 0)

我从 Lua 得到错误:

尝试对局部 'b' 执行算术运算(一个 nil 值)

当我更改 Lua 脚本时

return (a * b);

return a;

没有错误,但是来自 lua_tonumber(L, -1); 我得到值 4(我在 C:/ 中的第二个参数),所以看起来我在 C 中的第二个参数在 Lua 中是第一个。你知道我在代码中做错了什么吗?
我如何构建堆栈:

lua_getglobal (L, "Player");
lua_pushstring(L, "Func");
lua_gettable(L, -2);
lua_pushnumber(L, 3.0);
lua_pushnumber(L, 4.0);
4

1 回答 1

3

Ben 的评论是关键 - 阅读第 150 页“Lua 编程”中的面向对象编程部分。

http://www.lua.org/pil/16.html

冒号的作用是在方法定义中添加一个额外的隐藏参数,并在方法调用中添加一个额外的参数。

因此,您需要将“帐户”对象作为第一个参数推送,或者(在这种情况下更容易)更改function Player:Func(a, b)function Player.Func(a, b)

于 2012-05-27T21:35:24.937 回答