2011-08-10 180 views
0
warning: argument to `int' from `lua_Number' 

我從使用lua_tonumber函數中得到這些警告。問題是什麼?如何擺脫這些C++警告?

+4

演示該問題的一些示例代碼將有助於... –

+3

顯示產生警告的代碼行。 – aroth

+0

哪個編譯器?但lua傾向於用C++產生大量的警告。可能與lua只能在雙打上運行有關,而你通過int或其他方式傳遞。 –

回答

0

基於所提供和備件的信息,我的回答是這樣的:

lua_Number是雙。所以它抱怨轉換爲int。

的最簡單的方法來轉換是這樣的:

lua_Number a = 3.7; 
int b; 
b = static_cast<int>(a) 

然而,B將被3.如果你想圓它,你可以做這樣的事情:

lua_Number a = 3.7; 
int b; 
b = static_cast<int>(a+0.5) 

這樣您可以確保後綴大於或等於0.5的每個數字都被舍入。

但是你需要自己決定,你想要什麼樣的解決方案。

+0

我只見過像'reinterpret_cast (a)'這樣的代碼。它是否也與尖括號一樣適用於你如何寫它,或者是一個錯字? ('reinterpret_cast ') – Ponkadoodle

+0

這是一個錯字。這將是一個語法錯誤。 – Marlon

+2

你確定你想要一個''嗎?數字類型之間的轉換,比如'int'和'double',根本不需要轉換;轉換可以隱式完成('double d = 3.7; int b = d;')。 –

3

http://pgl.yoyo.org/luai/i/lua_tonumber

lua_Number lua_tonumber (lua_State *L, int index); 

它希望第二個參數的int。你的警告有用地說:「對int' from lua_Number'的爭論」。所以你可能會傳入'lua_Number'作爲第二個參數,而不是int。一個'lua_Number'是一個雙。

由於它是Lua棧中的索引號,所以傳遞double值沒有任何意義。我會檢查你的代碼,因爲傳入lua_Number可能是一個錯誤。

-1

試試static_cast?它通常會抑制警告,但我對Lua並不熟悉。

+2

它通常會_masks_代碼問題。 –

+0

它依賴於情況。當警告只是關於精度的損失時,static_cast比可接受的更多。 – Frigo

+0

修復精確度的損失更可以接受。 –

4

當您想要一個lua_Numberint時,請使用lua_tointeger