2012-05-27 64 views
1

我有奇怪的問題,從C++調用Lua函數。 我在Lua:lua_pcall我的籌碼看起來從C++調用Lua函數,缺少參數

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

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

前:

功能

我調用這個函數有:

lua_pcall(L, 2, 1, 0) 

而且我從Lua得到錯誤:

試圖對當地 'B'(一個零值)

執行算術當我在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); 
+0

顯然你的籌碼是不是你認爲它是。那麼爲什麼你不向我們展示設置堆棧的代碼? –

+4

你可能需要推一個隱藏的'this'指針(或者相當於Lua)嗎? –

回答

3

Ben的評論是關鍵 - 閱讀 「編程在Lua的」 面向對象的程序設計部分,第134頁

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

冒號的作用是在 方法定義中添加一個額外的隱藏參數,並在方法調用中添加一個額外的參數。

所以,你需要推送「帳戶」對象作爲第一個參數,或者(在這種情況下更容易地)改變function Player:Func(a, b)function Player.Func(a, b)