2012-09-29 2 views
-2

을 가져 불구하고, BoxSprite.h알 수없는 유형도 임

#import <Foundation/Foundation.h> 
#import "cocos2d.h" 
#import "BoxSum.h" 
#import "ArrowWrapper.h" 

@interface BoxSprite : CCSprite { 

} 
@property ArrowWrapper* arrowItem; 
@end 

내에서

Unknown type name ArrowWrapper 

또한, ArrowWrapper.h이 포함되어 있습니다.

#import "cocos2d.h" 
#import "BoxSprite.h" 

@interface ArrowWrapper : CCMenuItem { 

} 

@property BoxSprite* box; 
@end 

그것이 내가 깨끗했다 때까지 BoxSprite을 찾을 수 couldnt는 말을 ArrowWrapper에 있어야하는 데 사용되는 오류, 지금은이 ArrowWrapper을 찾을 수 없다는 BoxSprite에 있습니다.

제가 누락 된 항목을 파악할 수 없습니다.

미리 도움을 청하십시오.

답변

2

재귀 적 가져 오기가 있습니다. "BoxSprite.h"는 "ArrowWrapper.h"를 가져오고 그 반대의 경우도 마찬가지입니다.

import 문 중 하나를 제거하고 대신 @class을 사용해야합니다. "BoxSprite.h"예를 들어 필요한 경우는 다음 구현 파일 "BoxSprite.m"의 "ArrowWrapper.h"를 가져올 수 있습니다

@class ArrowWrapper; 

에 의해

#import "ArrowWrapper.h" 

를 교체합니다.

상세 설명 : 엑스 코드는 "BoxSprite.h"의 오류를 표시하지만, "ArrowWrapper.m는"컴파일 할 때 오류가 실제로 발생

  1. "ArrowWrapper.m"수입 "ArrowWrapper.h ".
  2. "ArrowWrapper.h"는 ArrowWrapper 클래스를 정의하기 전에 "BoxSprite.h"를 가져옵니다.
  3. "BoxSprite.h"는 "ArrowWrapper.h"를 가져옵니다. 그러나 "ArrowWrapper.h"는 이 이미 수입 됨으로 표시되어으로 표시되므로 컴파일러에서 다시 읽지 않습니다.
  4. 따라서 "BoxSprite.h"를 읽을 때 ArrowWrapper 클래스가 아직 정의되지 않았기 때문에 컴파일러 오류가 발생합니다. 이 인터페이스 파일을 읽지 않고 그 시점에서 컴파일러에 알려진 ArrowWrapper 클래스를 만들기 때문에 @classimport 교체

는 문제를 해결한다.

+0

감사합니다,하지만 난 정말 왜 이해하지? – Austin

+1

@Austin :'@ class'는 클래스를 실제로 인터페이스 파일을 가져 오지 않고 컴파일러에 알려줍니다. #import "루프"를 해결하는 일반적인 방법입니다. –

+0

@ 오스틴 : 자세한 내용은 http://stackoverflow.com/questions/322597/class-vs-import를 참조하십시오. –

0

문제는 import 문과 관련이 있다고 생각합니다.

당신은 BoxSprite.h에 #import "ArrowWrapper.h"을 가져오고 그래서 같은 BoxSprite.h을 변경 ArrowWrapper.h

#import "BoxSprite.h"을 가져 :이 일을

#import <Foundation/Foundation.h> 
#import "cocos2d.h" 
#import "BoxSum.h" 

@class ArrowWrapper; 
@interface BoxSprite : CCSprite { 

} 
@property ArrowWrapper* arrowItem; 
@end