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)

ただし、メソッド宣言の初期化とパラメーター型の両方の 2 番目のパラメーターは NSString* です。

ブロック定義を次のように変更します

BOOL (^blockRelationship)(id,NSString*)=^(id obj,NSString* relationship) { ... } ;

上記を GCC 4.2、GCC 4.2 LLVM、および Clang LLVM 1.6 でテストしました。

2番目のパラメーターを使用idすると、最初の2つのケースで、初期化行とパラメーターとして渡される行の両方にエラーが表示されましtoDictionaryBlockingRelationships: た.Clangの場合、エラーはまったく発生しませんでした.

2 番目のパラメーターとして を使用NSString*すると、3 つのコンパイルすべてでエラーは発生しませんでした。

于 2011-06-28T09:35:56.027 に答える