目标c-在LLVM GCC 4.2中使用块时的编译问题



我不久前写了一个要点:https://gist.github.com/611157.它编译并运行良好。

我最近又回来了,它不再遵守。

我注意到它使用LLVM 2.0编译,没有任何问题或警告(然后运行并工作!)

LLVM GCC 4.2无法编译。我得到以下错误

error: incompatible block pointer types initializing 'signed char (^)(struct objc_object *, struct NSString *)', expected 'BOOL (^)(struct objc_object *, struct objc_object *)'

我有一种感觉,我有一个申报遗漏或错误,但我不知道,所以我想我会问。

有什么想法吗?

问题是您的块具有类型:

BOOL (^blockRelationship)(id,id)

但是初始化中的第二个参数和方法声明中的参数类型都是NSString*

将块定义更改为

BOOL (^blockRelationship)(id,NSString*)=^(id obj,NSString* relationship) { ... } ;

我已经在GCC 4.2、GCC 4.2 LLVM和Clang LLVM 1.6中测试了以上内容。

对于id第二个参数,在前两种情况下,我在初始化行和将其作为参数传递给toDictionaryBlockingRelationships:的行上都出现了错误。

NSString*作为第二个参数,三个汇编都没有出现错误。

最新更新