2011-08-10 226 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