3

前段时间我写了一个要点: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 *)'

我觉得我的声明丢失或错误,但我不知道,所以我想我会问。

有什么想法吗?

4

1 回答 1

2

问题是您的块具有类型:

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: Clang 的行中,我完全没有错误。

使用NSString*第二个参数,所有三个编译都没有错误。

于 2011-06-28T09:35:56.027 回答