"Попытка использовать передний класс" Игра "как суперкласс" MathGame "в Cocos2d

Я делаю игру Cocos2d для iphone, и у меня есть основной режим игры, Game, который наследуется от CCLayer.

Я пытаюсь создать другой игровой режим MathGame, который наследует от Game, но когда я пытаюсь скомпилировать, я получаю эту ошибку в MathGame.h:

Попытка использовать передний класс "Игра" в качестве суперкласса "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

Я не могу найти что-нибудь полезное в Интернете. Любые идеи?

Ответ 1

У вас просто есть цикл импорта:

  • Game import SplashScreenLayer
  • SplashScreenLayer import MathGame
  • MathGame import Game

Ваше решение:

Оставьте import внутри MathGame и измените другой импорт на @class.

Подводя итог:

// 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

С ответом на ваш вопрос, позвольте мне объяснить несколько вещей, которые я уже знаю, начиная с чтения о дециляторах и циклах импорта:

Во-первых, почитайте о них! Они очень важная часть Objective-C, и вы не хотите пропустить ее!

Во-вторых, используйте @class, когда вам нужен этот класс для частных переменных или параметров метода. Используйте импорт для наследования и strong.

В-третьих, не забывайте #import перенаправленные классы в файле реализации!

Ответ 2

В моем случае я использую класс xx и использую @class, но не #import.h file.and компиляция жалобы..