0

次の Objective-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

プロジェクトをビルドしようとすると、Xcode (v4) が怒鳴って、Expected specifier-qualifier-list before GameControllerunknown type name 'Menu'. 何らかの関係があると確信していますが、どのように関係があるのか​​ わかりませんか?

4

2 に答える 2

0

インポートには循環参照があります。コンパイラはimportステートメントから依存関係ツリーを構築するため、2つのクラスが相互に依存している場合、一方を他方の前にコンパイルする方法がわかりません。

悲しいことに、これが発生すると、gccはかなり無意味なエラーステートメントを開始します。「Expectedspecifier-qualifier-list」。@yanは、@classディレクティブを使用する必要があるということは正しいです。確かな説明については、この質問を確認してください:@class vs. #import

于 2011-02-23T16:58:28.917 に答える
0

ヘッダー ファイルを相互にインクルードすることはお勧めできません。Menu.h をインポートする代わりに、@classディレクティブを使用します。削除してその場所#import "Menu.h"に追加してみてください。@class MenuMenu.h についても同様 (GameController インクルードを削除し、@classディレクティブを追加)

于 2011-02-23T16:53:44.427 に答える