block中出现此种报错: Incompatible block pointer types initializing 'float (^__strong)(float, float)' with an expression of type 'int (^)(float, float)'
2015-11-09 19:58
330 查看
当block(代码块)的返回值是float时,应注意的地方:定义的返回值类型一定要与return的返回值类型一样
我们以两个数的四则运算来举例
在main.m文件中的四则运算中,我采用两种返回值类型(int 与 float)相互对照。
分析:
初看这段程序,感觉还都挺对,如果在电脑上运行,返回值为“int”类型时,程序可以成功实现,但返回值类型为“float”类型时,在我们运行程序时会出现这样的错误:
Incompatible block pointer types initializing 'float (^__strong)(float, float)' with an expression of type 'int (^)(float, float)'
我们要是知道“block”中的返回值的要求,我们就不难看出代码的错误原因,在第二种方法,返回值为float类型,可“return”返回的值却为“0”,(系统默认“0”为整形),前后矛盾,故而错误;并且我们可以通过验证得知:return后的返回值为0.0或1.25等等float类型的数值时,计算机都会报错,但当我们将return后的数值改为一个float类型的变量(如程序中的sum或dif等)或“0.0f”时,程序就是正确的,可以成功运行,原因就在于定义的返回值类型一定要与return的返回值类型一样
我们以两个数的四则运算来举例
在main.m文件中的四则运算中,我采用两种返回值类型(int 与 float)相互对照。
#import <Foundation/Foundation.h> void fun1(int(^block)(int a,int b)){ block(20,2); } void fun2(float(^block)(float a,float b)){ block(20.0,2.0); } int main(int argc, const char * argv[]) { @autoreleasepool { //block返回值为int类型 int(^myblock1)(int a,int b) = ^(int a,int b){ int sum = a+b; int dif = a-b; int squ = a*b; int div = a/b; NSLog(@"和%d 差%d 积%d 商%d",sum,dif,squ,div); return 0; }; fun1(myblock1); //block返回值为float类型 float (^myblock2)(float a,float b) = ^(float a,float b){ float sum = a+b; float dif = a-b; float squ = a*b; float div = a/b; NSLog(@"和%.2f 差%f 积%f 商%f",sum,dif,squ,div); return 0; //此处有误 }; fun2(myblock2); } return 0; }
分析:
初看这段程序,感觉还都挺对,如果在电脑上运行,返回值为“int”类型时,程序可以成功实现,但返回值类型为“float”类型时,在我们运行程序时会出现这样的错误:
Incompatible block pointer types initializing 'float (^__strong)(float, float)' with an expression of type 'int (^)(float, float)'
我们要是知道“block”中的返回值的要求,我们就不难看出代码的错误原因,在第二种方法,返回值为float类型,可“return”返回的值却为“0”,(系统默认“0”为整形),前后矛盾,故而错误;并且我们可以通过验证得知:return后的返回值为0.0或1.25等等float类型的数值时,计算机都会报错,但当我们将return后的数值改为一个float类型的变量(如程序中的sum或dif等)或“0.0f”时,程序就是正确的,可以成功运行,原因就在于定义的返回值类型一定要与return的返回值类型一样
相关文章推荐
- 第120讲:Hadoop的MapReduce和Yarn的配置实战详解学习笔记
- Beaglebone Black(8)运用Python来进行控制IO,ADC,PWM
- 【创龙TMS320C6748开发板试用】+ 中断学习
- 屏蔽拨号弹出用户和密码的提示框
- 王家林老师的免费大数据视频,欢迎大家下载学习。
- 对Adaboost和SVM的一点直观认识
- Trinea性能优化之性能优化实例
- 处理elasticsearch中的NODENOTAVAILABLEEXCEPTIONS异常
- 不一样的hello world
- View 的 duplicateParentState 属性
- 【转】汪峰站在浪潮上 | 长报道
- unity 2D Sprite网格Slice工具
- 设计模式01-单例设计模式
- Java基础学习23(abstract)
- 第119讲:HDFS的配置以及安全高效的HDFS配置最佳实践学习笔记
- 录音计时的实现方法
- ios Bluetooth 蓝牙
- 机器学习实战(二)
- Linux下system和exec函数族的区别
- css:outline