0

我有以下 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 GameControllerand unknown type name 'Menu'. 我确定它们在某种程度上是相关的,但我不知道如何?

4

2 回答 2

0

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

于 2011-02-23T16:53:44.427 回答
0

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

可悲的是,当这种情况发生“预期的说明符限定符列表”时,gcc 会抛出一个相当荒谬的错误语句。@yan 是正确的,您应该使用 @class 指令。查看这个问题以获得可靠的解释:@class vs. #import

于 2011-02-23T16:58:28.917 回答