之前的预期说明符 - 限定符 - 列表

时间:2011-02-23 16:50:32

标签: list specifier

我有以下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 GameControllerunknown type name 'Menu'。我确信它们有某种关系,但我不知道怎么做?

2 个答案:

答案 0 :(得分:0)

拥有相互包含的头文件并不是一种好习惯。而不是导入Menu.h,使用@class指令。尝试删除#import "Menu.h"并在其位置添加@class Menu。同样适用于Menu.h(删除GameController include,并添加@class指令)

答案 1 :(得分:0)

您的导入中有循环引用。编译器从import语句构建依赖关系树,因此当两个Classes相互依赖时,它不知道如何在另一个之前编译它们。

可悲的是,当发生这种情况时,gcc会发出一个相当荒谬的错误陈述“Expected specifier-qualifier-list”。 @yan是正确的,你应该使用@class指令。请查看此问题以获得可靠的解释:@class vs. #import