我有一个方法loading
:
-(void)loading:(MKTileOverlayPath)path ... {
...
在这种方法中,我试图计算一些东西
NSInteger *a = pow(2, path.z) - path.y - 1;
我收到错误:
使用不兼容类型'double'的表达式初始化'NSInteger *'(又名'long *')
为什么会加倍? path.z和path.y,如documentation MKTileOverlayPath中所述,整数。如果只有pow(2, path.z)
,那么float
也不会产生double
或integers
......为什么会这样?
答案 0 :(得分:1)
您有两个错误:
标准C pow()
产生一个double
,它的参数也是double
- 你的整数参数都是隐含的。整数类型没有版本。最好的解决方案是不使用强制转换来获取整数值,这会引入错误的可能性,以适应浮点数学的性质,但只需编写自己的整数幂函数。您可以复制this answer中的那个 - 只需使用您需要的整数类型(int
,long
等)来实现它。
您混淆了变量类型,对象类型是引用类型并声明为指针,例如NSString *
;简单数字类型是值类型并且不是指针,例如NSInteger
。
答案 1 :(得分:0)
在数学上它不会产生非整数值,但这不是pow()
函数的契约。根据{{3}},参数被隐式转换为双精度,函数的返回值始终为double。