无法初始化整数

时间:2018-03-29 14:31:25

标签: c++ ios objective-c mapkit

我有一个方法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也不会产生doubleintegers ......为什么会这样?

2 个答案:

答案 0 :(得分:1)

您有两个错误:

  1. 标准C pow()产生一个double,它的参数也是double - 你的整数参数都是隐含的。整数类型没有版本。最好的解决方案是使用强制转换来获取整数值,这会引入错误的可能性,以适应浮点数学的性质,但只需编写自己的整数幂函数。您可以复制this answer中的那个 - 只需使用您需要的整数类型(intlong等)来实现它。

  2. 您混淆了变量类型,对象类型是引用类型并声明为指针,例如NSString *;简单数字类型是值类型并且不是指针,例如NSInteger

答案 1 :(得分:0)

在数学上它不会产生非整数值,但这不是pow()函数的契约。根据{{​​3}},参数被隐式转换为双精度,函数的返回值始终为double。