Я работаю над игрой для 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;), как это было предложено несколькими из них.
Еще раз спасибо!