2011-06-28 49 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'部分。這是有道理的。 –