2011-06-28 51 views
3

前段时间我写了一个要点:https://gist.github.com/611157。它编译和工作正常。用LLVM GCC使用块时的编译问题4.2

我最近回到它,它不再遵守。

我注意到它与编译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

显示您的块和变量声明 – Eiko

回答

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*作为第二个参数,在所有三个编译中都没有错误。

+0

+1我确实忽略了'NSString'部分。这是有道理的。 –