2010-05-20 64 views
2

为什么在Cocoa中不可能两个类都导入对方? 我尝试下面的代码:可可控制器导入模型,模型导入控制器 - >异常

或者Controller.h:

#import <Cocoa/Cocoa.h> 
#import "Model.h" 

@interface Controller : NSObject { 
Model *model; 
} 

@end 

Model.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' 

能有人请解释为什么这是?

谢谢! xonic

+1

这不是技术上的“例外”(这是一个运行时事件),这是一个编译器错误信息。 – 2010-05-20 12:38:33

+0

在这种情况下,“为什么”相当简单,如果您在心里扩大#import以将一个文件的文本放入另一个文件中,您可以亲自看到它:在定义Controller之前导入Model的定义,但该定义使用控制器。反之亦然。有一个循环依赖,所以一个*总是*没有被定义在另一个之前。这就是为什么@class声明存在的原因:它只是说“我将在稍后定义它,同时不要担心它。”这打破了这个循环,等等。 – walkytalky 2010-05-21 23:33:14

回答

0

做解释为什么?第

但解决办法是使用@class声明,如下所示:

@class Model; 
@interface Controller : NSObject { 
Model *model; 
} 
@end 
0

对此的解决方案是: Model.h:

#import <Cocoa/Cocoa.h> 
#import "Controller.h" 

@class Controller; 
@interface Model : NSObject { 
Controller *controller; 
} 

@end 

你与