Я работаю над игрой для 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
Этот код даже не будет создан, и я получаю следующую ошибку, где указано:
Ожидается '(' до ''Tile '
Если я изменю тип с (Tile*)
на (NSObject*)
, это исправит ошибку, из-за чего я считаю, что Tile
не распознается как тип объекта.
Я искал в Google и на этом сайте и не могу понять, почему это происходит.
Обновление
Глупая ошибка; ее легко исправить.
Как вы все отметили, проблема заключается в том, что два заголовочных файла импортируют друг друга, что недопустимо. На данный момент я исправил проблему, переместив оператор #import "Board.h" в Tile.m, поскольку он не нужен в заголовочном файле. Позже, если я решу использовать Board в файле Tile.h, я буду использовать прямые ссылки (@class Board;), как некоторые из вас предложили.
Еще раз спасибо!