使用具有LLVM GCC 4.2的块时的编译问题

时间:2011-06-28 08:42:02

标签: objective-c ios4 llvm objective-c-blocks llvm-gcc

我刚才写了一篇小说: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 *)'

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

任何想法?

1 个答案:

答案 0 :(得分: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*作为第二个参数,所有三个编辑都没有错误。