【发布时间】:2010-05-20 12:31:44
【问题描述】:
为什么在 Cocoa 中两个类不能相互导入? 我尝试了以下代码:
控制器.h:
#import <Cocoa/Cocoa.h>
#import "Model.h"
@interface Controller : NSObject {
Model *model;
}
@end
模型.h:
#import <Cocoa/Cocoa.h>
#import "Controller.h"
@interface Model : NSObject {
Controller *controller;
}
@end
引发以下异常:
error: expected specifier-qualifier-list before 'Controller'
error: expected specifier-qualifier-list before 'Model'
谁能解释一下这是为什么?
谢谢! 索尼克
【问题讨论】:
-
这在技术上不是一个“异常”(这是一个运行时事件),它是一个编译器错误消息。
-
在这种情况下,“为什么”相当简单,如果您在脑海中扩展#import 以将一个文件的文本放入另一个文件中,您可以自己看到它:您先导入 Model 的定义定义控制器,但该定义使用控制器。反之亦然。存在循环依赖,因此一个总是没有在另一个之前定义。这就是 @class 声明存在的原因:它只是说“我稍后会定义它,同时不要担心它。”这打破了循环,等等。
标签: objective-c cocoa model-view-controller import