Ожидаемый спецификатор-квалификатор-список перед - PullRequest
0 голосов
/ 23 февраля 2011

У меня есть следующие заголовки Objective C:

// Menu.h

#import <UIKit/UIKit.h>
#import "GameController.h"

@interface Menu : UIImageView {
    GameController *gameController;   // "Expected specifier-qualifier-list
                                      // before GameController"
}

- (void)appear;

@end

и

// GameController.h

#import <UIKit/UIKit.h>
#import "Menu.h"

@interface GameController : UIView {
    Menu *menu;                       // "Unknown type name 'Menu'"
}

- (void)startLevel0;
- (void)startLevel1;
- (void)startLevel2;

@end

Когда я пытаюсь построить проект, Xcode (v4) кричит на меня, говоря: Expected specifier-qualifier-list before GameController и unknown type name 'Menu'.Я уверен, что они как-то связаны, но я понятия не имею, как?

Ответы [ 2 ]

0 голосов
/ 23 февраля 2011

У вас есть круговая ссылка в вашем импорте. Компилятор строит дерево зависимостей из операторов импорта, поэтому, когда два класса полагаются друг на друга, он не знает, как скомпилировать один перед другим.

К сожалению, gcc выдает довольно бессмысленное сообщение об ошибке, когда это происходит «Ожидаемый список спецификаторов-спецификаторов». @yan правильно, что вы должны использовать директиву @class. Проверьте этот вопрос для убедительного объяснения: @ class vs. # import

0 голосов
/ 23 февраля 2011

Не рекомендуется иметь взаимно включающие заголовочные файлы.Вместо импорта Menu.h используйте директиву @class.Попробуйте удалить #import "Menu.h" и добавить @class Menu вместо него.То же самое для Menu.h (удалите GameController и добавьте директиву @class)

...