Подтвердить что ты не робот

Missing @end + ожидаемый идентификатор "{" ошибки в модуле XCode 4.2.h

Я не могу избавиться от двух ошибок в моем модуле класса, даже когда я упростил код до минимального выражения:

#import <Foundation/Foundation.h>

@interface MyClass : NSObject

@end

Обе ошибки сообщаются на строке @interface, и они: - отсутствует @end - ожидаемый идентификатор или '{'

4b9b3361

Ответ 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