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