2010-05-20 136 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 

你與