17

私は iPhone 用の Cocos2d ゲームを作成していGameますCCLayer

MathGameから継承する別のゲーム モード を作成しようとしてGameいますが、コンパイルしようとすると で次のエラーが発生しMathGame.hます。

前方クラス「Game」を「MathGame」のスーパークラスとして使用しようとしています

の実装とインターフェースMathGameが空であっても、エラーが発生します。MathGame.hそして、別のファイルに含めようとした場合にのみ発生します。

Game クラスのコードは次のとおりです。

// Game.h
#import "cocos2d.h"
#import <GameKit/GameKit.h>
#import "SplashScreenLayer.h"

@interface Game : CCLayer
    // A bunch of stuff
@end

新しいゲームの種類:

// MathGame.h
#import "Game.h"

@interface MathGame : Game
@end

そして両方を含むメインメニュー:

// SplashScreen.h
#import "cocos2d.h"
#import "Game.h"
#import "MathGame.h"
#import "HowToPlayLayer.h"
#import "AboutLayer.h"

@interface SplashScreenLayer : CCLayer
    // A bunch of stuff
@end

オンラインで役立つものが見つかりません。何か案は?

4

2 に答える 2

33

インポートサイクルがあります。

  1. Game輸入SplashScreenLayer
  2. SplashScreenLayer輸入MathGame
  3. MathGame輸入Game

あなたの解決策:

importの内部を残し、MathGame他のインポートを@classに変更します。

要約すると:

// Game.h
#import "cocos2d.h"
#import <GameKit / GameKit.h>

@class SplashScreenLayer;
@interfaceゲーム:CCLayer
    //たくさんのもの
@終わり

新しいゲームタイプ:

// MathGame.h
#import "Game.h"

@interface MathGame:ゲーム
@終わり

そして、両方を含むメインメニュー:

// SplashScreen.h
#import "cocos2d.h"
#import "HowToPlayLayer.h"
#import "AboutLayer.h"

@classゲーム;
@class MathGame;
@interface SplashScreenLayer:CCLayer
    //たくさんのもの
@終わり

上記の質問に答えて、フォワードデクレレーションとインポートサイクルについて読んだことで私がすでに知っているいくつかのことを説明しましょう。

まず、それらについて読んでください!それらはObjective-Cの非常に重要な部分であり、見逃したくないです!

次に、プライベート変数またはメソッドパラメータにそのクラスが必要な場合は常に@classを使用します。継承と強力なプロパティにはインポートを使用します。

#import第三に、実装ファイルで転送されたクラスを忘れないでください!

于 2012-08-06T03:21:25.910 に答える
0

私の場合、xx クラスを使用し、@class を使用しますが、.h ファイルを #import しません。コンパイルは文句を言います..

于 2014-02-26T05:43:52.883 に答える