2011-02-23 3 views
0

나는이 다음 목표 - C 헤더 :예상 지정-규정 목록 이전

// Menu.h 

#import <UIKit/UIKit.h> 
#import "GameController.h" 

@interface Menu : UIImageView { 
    GameController *gameController; // "Expected specifier-qualifier-list 
             // before GameController" 
} 

- (void)appear; 

@end 

// GameController.h 

#import <UIKit/UIKit.h> 
#import "Menu.h" 

@interface GameController : UIView { 
    Menu *menu;      // "Unknown type name 'Menu'" 
} 

- (void)startLevel0; 
- (void)startLevel1; 
- (void)startLevel2; 

@end 

내가 프로젝트를 빌드 할 때, 엑스 코드 (V4)가 나를 으악, Expected specifier-qualifier-list before GameControllerunknown type name 'Menu'이라고 말합니다. 나는 그들이 어떻게 든 관계가 있다고 확신하지만 어떻게 될지 모른다.

답변

0

상호 헤더 파일을 포함하는 것은 좋지 않습니다. Menu.h를 가져 오는 대신 @class 지시어를 사용하십시오. #import "Menu.h"을 제거하고 @class Menu을 대신 넣으십시오. Menu.h에 대한 내용 (GameController 포함을 제거하고 @class 지시문을 추가하십시오.)

+0

효과가 있습니다. 고맙습니다. – aniiye

0

가져 오기에 순환 참조가 있습니다. 컴파일러는 import 문에서 종속성 트리를 작성합니다. 따라서 두 클래스가 서로 의존 할 때 컴파일러는 서로를 먼저 컴파일하는 방법을 모릅니다.

"Expected specifier-qualifier-list"가 발생하면 gcc가 "무의미한 오류가 발생했습니다. @yan은 @class 지시어를 사용하는 것이 맞습니다. 확실한 설명을 보려면이 질문을 확인하십시오. @class vs. #import

관련 문제