Missing @end + ожидаемый идентификатор "{" ошибки в модуле XCode 4.2.h
Я не могу избавиться от двух ошибок в моем модуле класса, даже когда я упростил код до минимального выражения:
#import <Foundation/Foundation.h>
@interface MyClass : NSObject
@end
Обе ошибки сообщаются на строке @interface, и они:
- отсутствует @end
- ожидаемый идентификатор или '{'
Ответы
Ответ 1
Проверьте файлы заголовков, которые #imported на той же странице, и убедитесь, что заголовки имеют соответствующие операторы @interface/@end.
У меня была та же проблема, и XCode сообщил, что мой .m файл @implementation имел отсутствующий оператор @end, даже когда я уменьшил его до:
#import "MasterViewController.h"
#import "MyBadHeaderFile.h"
@implementation MasterViewController
@end
В действительности ошибка была отсутствующим @end из файла #imported MyBadHeaderFile.h.
Ответ 2
Комментарий rokjarc должен быть правильным:
1) компилятор может указать вам на совершенно неправильный файл. пройдите через все файлы .h и .m в свой проект и проверьте соответствие "@interface" /'@end', '@implementation'/'@end' и т.д.
2) это также происходит, если вы по ошибке импортируете файл .m вместо .h
Ответ 3
У меня была аналогичная проблема: добавление }
в мой код избавило меня от ошибок.
Прежде чем я добавил }
, я получал следующие ошибки:
- неожиданный
@
в программе (проблема синтаксического анализа)
- Ожидаемый
}
(проблема синтаксического анализа)
-
@end
отсутствует в контексте реализации (семантическая проблема)
Ответ 4
Не имеет значения, в каком файле появляется ошибка. Обязательно проверьте все файлы, которые вы недавно изменили. Я, кажется, скопировал файл из тестового проекта в мой фактический проект и забыл @end в одном из файлов. Это дало мне ошибку на полностью несвязанный файл .h.
Ответ 5
Попробуйте удалить файл реализации этого класса из "Скомпилировать источники в настройках проекта"
Ответ 6
@interface MyClass : NSObject{
}
@end
Ответ 7
У меня возникла аналогичная проблема, код был в порядке, но он выбрасывал эту ошибку.
В конце концов я решил его очистить, попробовал ли вы это?
Ответ 8
PEBKAC + Отсутствие специфичности в строках статического анализатора
Существующие ответы, безусловно, полезны. Я просто хочу добавить общий PEBKAC, который вызывает это; а также подчеркнуть, что CLANG должен быть яснее здесь. Кто-то, у кого есть знания домена, должен подать патч, чтобы сделать сообщение об ошибке более четким. \[email protected]\n
часть сообщения смехотворна независимо от того, что.
(Отображение разрыва строки как \n в сообщении, предназначенном для помощи пользователям GUI? Действительно CLANG?)
Причина
Когда вы только что создали новый класс, файлы @interface
и @implementation
выглядят очень похожими, и Xcode автоматически помещает ваш курсор в реализацию.
Если вы бездумно начнете вводить свой интерфейс (объявления подписи вашего метода) в файле реализации, вы получите это предупреждение, потому что анализатор видит методы без открытия и закрытия фигурных скобок.
Наглядный пример, показанный сразу
![Missing @end is a case of PEBKAC]()
Ответ 9
У меня была такая же ошибка, и это было потому, что у меня был
@interface MyViewController ()
объявлен два раза в MyViewController.m