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