我刚才写了一篇小说: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 *)'
我觉得我的声明遗失或错误,但我不知道,所以我想我会问。
任何想法?
答案 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*
作为第二个参数,所有三个编辑都没有错误。