Проблема компиляции при использовании блоков с LLVM GCC 4.2 - PullRequest
3 голосов
/ 28 июня 2011

Некоторое время назад я написал суть: 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 Ответ

2 голосов
/ 28 июня 2011

Проблема в том, что ваш блок имеет тип:

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* в качестве второго параметра не было ошибок во всех трех компиляциях.

...