“Attempting to use the forward class 'Game' as superclass of 'MathGame'” in Cocos2d

前端 未结 2 1865
野趣味
野趣味 2021-01-17 09:46

I\'m making a Cocos2d game for iphone, and I have my main game mode, Game, which inherits from CCLayer.

I\'m trying to make another game mo

相关标签:
2条回答
  • 2021-01-17 10:15

    You simply have an import cycle:

    1. Game imports SplashScreenLayer
    2. SplashScreenLayer imports MathGame
    3. MathGame imports Game

    Your solution:

    Leave the import inside the MathGame, and change the other imports to @class.

    To sum it up:

    // Game.h
    #import "cocos2d.h"
    #import <GameKit/GameKit.h>
    
    @class SplashScreenLayer;
    @interface Game : CCLayer
        // A bunch of stuff
    @end
    
    The new game type:
    
    // MathGame.h
    #import "Game.h"
    
    @interface MathGame : Game
    @end
    
    And the main menu that includes both:
    
    // SplashScreen.h
    #import "cocos2d.h"
    #import "HowToPlayLayer.h"
    #import "AboutLayer.h"
    
    @class Game;
    @class MathGame;
    @interface SplashScreenLayer : CCLayer
        // A bunch of stuff
    @end
    

    With your question answered above, let me explain a few things I already know from reading about forward declerations and import cycles:

    First, go read about them! They are a very important part of Objective-C, and you don't want to miss it!

    Secondly, use @class whenever you need that class for private variables or method parameters. Use imports for inheritance and strong properties.

    Thirdly, don't forget to #import your forwarded classes in the implementation file!

    0 讨论(0)
  • 2021-01-17 10:20

    In my case,I user the xx class and use the @class but not #import the .h file.and the compile complain..

    0 讨论(0)
提交回复
热议问题