2012-03-16 2 views
0

Мой заголовок класса не может найти протокол, объявленный в другом заголовке, который определен «снаружи». структура выглядит следующим образом:Начало протокола ObjC

x1.h имеет импорт x2.h протокола
x1.h
импорта x3.h x2.h

Проблема заключается в том, что x3.h не в состоянии найти протокол.

Я хочу, чтобы избежать импорта x1.h в x3.h уменьшить дупликации

Ошибка «Синтаксический Issue Ожидаемым типа»

я получил запущенное состояние. Но после того, как я скопировал некоторый #import с x3.m на x2.h, появляется 100 ошибок с Unknown Type и Parse Issue. Даже в произвольных классах, например. (y42.m) являются ошибками. Странно, что класс y42.m импортирует x3.h и не знает x3.

Спасибо за чтение!

Дополнительная информация: Содержание x1.h

@protocol aDelegate <NSObject> 

- (void)callback; 

@end 

Содержание x2.h

#import "x1.h" 

typedef enum { 
    kOne, 
    kTwo, 
    kThree, 
}States; 

Содержание x3.h

#import "x2.h" 

@interface x3 : NSObject <aDelegate> 
{ 
    States anyState; 
} 

@end 

Государство неизвестно и aDelegate неизвестно , Причина тоже неизвестна.

+0

Честно говоря, я действительно не понимаю. Вы говорите, что не нашли объявления протокола, а x1.h "имеет протокол", и вы считаете, что можете исправить это, включив x1.h в x2.h (чего вы хотите избежать по уважительным причинам). Но если протокол находится в x1.h, почему бы вам не найти его? –

+2

Возможно, вы можете указать ошибки и код компилятора, чтобы мы могли точно видеть, что вы делаете. – nil

ответ

0

Я думаю, что нам нужна дополнительная информация об ошибках, но я исправил аналогичную проблему, объявив протокол в отдельном заголовке (и только протоколе) (x4.h) и импортировал его в нужные классы. С информацией это единственное предложение.

0

Вы должны закрыть объявление х3 с

@end 

И ваше перечисление называется государства, а не государства.

В противном случае я не вижу проблем с этим кодом.

0

У меня была аналогичная проблема с теми же сообщениями об ошибках. Короткий ответ: у меня был круговой импорт.

Итак, решение было таким, как предложил Луис Эспиноза.

Длинный ответ: есть .h файл (a.h), который импортирует целую кучу файлов .h, которые обычно используются. Он также определяет целый набор перечислений, которые обычно используются. Мне понадобилось одно из этих перечислений в одном из импортированных файлов h.h (a.h). Поэтому, не задумываясь, я импортировал «a.h» внутри b.h. XCode сообщил об этом как о многочисленных случаях «Parse Issue Ожидаемый тип». Я извлек перечисления в c.h и импортировал их как в a.h, так и в b.h, что и предложил Луис.

И извлеченный урок состоит в том, что, когда XCode сообщает «Parse Issue Ожидаемый тип», вы должны рассмотреть возможность поиска циклического импорта.

Смежные вопросы