【问题标题】:Expected specifier-qualifier-list before之前的预期说明符限定符列表
【发布时间】:2011-07-02 22:00:27
【问题描述】:

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

【问题讨论】:

    标签: list specifier


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-09-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多