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

把它们加起来:

// 游戏.h
#import "cocos2d.h"
#import <GameKit/GameKit.h>

@class SplashScreenLayer;
@界面游戏:CCLayer
    //一堆东西
@结尾

新游戏类型:

// 数学游戏.h
#import "游戏.h"

@interface MathGame:游戏
@结尾

主菜单包括两者:

// 闪屏.h
#import "cocos2d.h"
#import "HowToPlayLayer.h"
#import "AboutLayer.h"

@类游戏;
@类数学游戏;
@interface SplashScreenLayer : CCLayer
    //一堆东西
@结尾

上面回答了您的问题,让我解释一下我从阅读有关前向声明和导入周期中已经知道的一些事情:

首先,去了解他们!它们是 Objective-C 中非常重要的一部分,你不想错过!

其次,当您需要该类作为私有变量或方法参数时,请使用 @class。将导入用于继承和属性。

第三,不要忘记#import在实现文件中转发你的类!

于 2012-08-06T03:21:25.910 回答
0

在我的情况下,我使用 xx 类并使用@class 但不使用#import .h 文件。并且编译抱怨..

于 2014-02-26T05:43:52.883 回答