Я работаю над игрой для iPad, используя cocos2d, которая включает в себя доску, наполненную различными типами плиток. Я создал собственный класс под названием Tile
как общий шаблон для фрагментов и несколько подклассов Tile
, которые имеют разные свойства и методы. Я также создал класс под названием Board
, который, среди прочего, отслеживает расположение всех фрагментов с использованием специальной системы координат.
По какой-то причине в классе Board
компилятор, похоже, не распознает Tile
как тип объекта, хотя я добавил #import "Tile.h"
в начало файла.
Вот соответствующий код (просто спросите, есть ли другие части кода, который вы хотите увидеть):
Tile.h
#import <Foundation/Foundation.h>
#import "cocos2d.h"
#import "Board.h"
@interface Tile : NSObject
-(void) updateNeighbors;
@property (nonatomic, retain) CCSprite* sprite;
@property (assign) CGPoint coords;
@property (assign) CGPoint positionInPoints;
@property (nonatomic, retain) NSMutableArray *neighbors;
@end
Board.h
#import <Foundation/Foundation.h>
#import "cocos2d.h"
#import "Tile.h"
@interface Board : NSObject
+(Board*)sharedBoard;
- (void) putTile: (Tile*) tile AtIndex: (CGPoint) index; //<-- error here!
- (void) replaceTileAtIndex: (CGPoint) index1 WithTileAtIndex: (CGPoint) index2;
- (Tile*) tileAtIndex: (CGPoint) index; //<-- error here!
- (void) populate;
@property (nonatomic, retain) NSMutableArray *tiles;
@property (nonatomic, retain) NSString *type;
@property (assign) CGPoint size;
@end
Этот код даже не будет создан, и я получаю следующее сообщение об ошибке:
Ожидаемый '(' before 'Tile'
Если я изменяю тип от (Tile*)
до (NSObject*)
, он исправляет ошибку, что заставляет меня думать, что Tile
не распознается как тип объекта.
Я искал через Google и этот сайт и не могу понять, почему это происходит.
Update
Неверная ошибка; легко исправить.
Как вы все указали, проблема в том, что два файла заголовка импортируют друг друга, что недопустимо. На данный момент я исправил эту проблему, перемещая оператор #import "Board.h" в Tile.m, так как он не нужен в файле заголовка. Позже, если я решит использовать Board в файле Tile.h, я буду использовать перекрестные ссылки (@class Board;), как это было предложено несколькими из них.
Еще раз спасибо!