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

匿名 (未验证) 提交于 2019-12-03 00:46:02

问题:

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 mode, MathGame, which inherits from Game, but when I try to compile, I get this error in MathGame.h:

Attempting to use the forward class 'Game' as superclass of 'MathGame'

I get the error even if the implementation and interface of MathGame are empty. And it only happens if I try to include MathGame.h in another file.

Here's the code for the Game class:

// Game.h #import "cocos2d.h" #import <GameKit/GameKit.h> #import "SplashScreenLayer.h"  @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 "Game.h" #import "MathGame.h" #import "HowToPlayLayer.h" #import "AboutLayer.h"  @interface SplashScreenLayer : CCLayer     // A bunch of stuff @end 

I can't find anything helpful online. Any ideas?

回答1:

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!



回答2:

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



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!