2010-05-20 4 views
2

코코아에서 두 클래스가 서로 가져올 수없는 이유는 무엇입니까?코코아 컨트롤러 가져 오기 모델, 모델 가져 오기 컨트롤러 -> 예외

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

이는 "예외"(런타임 이벤트 인),이 컴파일러 오류 메시지의 기술적 없습니다. –

+0

"이유"는이 경우 상당히 간단하며 #import를 정신적으로 확장하여 한 파일의 텍스트를 다른 파일에 배치하면 컨트롤러를 정의하기 전에 Model의 정의를 가져 오지만 그 정의에는 다음을 사용합니다. 제어 장치. 그 반대. 순환 종속성이 있으므로 항상 다른 하나보다 먼저 정의되지 않았을 것입니다. 이것이 바로 @class 선언이 존재하는 이유입니다. 간단히 말해서 "나중에 정의 하겠지만, 걱정하지 마세요." 그것은 사이클을 깨뜨리는 것입니다. – walkytalky

답변

0

함께 할 이유를 설명해 Model.h? 제

그러나 해결책은 이렇게 같은 @class 선언을 사용하는 것입니다

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

이에 대한 해결책이 있다는 것입니다 :

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

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

@end 

그리고 그

관련 문제