Я работаю над играми Cocos2D и Box2D. Я только что создал класс для интерфейса игры, чтобы игроки могли выбирать разные типы управления. Поскольку я использую Box2D для физики, похоже, что все классы должны быть .mm вместо .m - но когда я иду, чтобы определить новый объект контроллера в HelloWorldLayer.h, я получаю следующие ошибки:
«ISO C ++ Запрещает объявление SparkController без типа».
а также
«Ожидаемый»; до '*' токена ".
Я нашел несколько статей, в которых люди получали похожую ошибку, но все они были в очень разных ситуациях. Я чувствую, что это одна из тех общих ошибок, которые могут быть вызваны множеством различных проблем.
Объявление моего экземпляра SparkController в HelloWorldLayer.h выглядит следующим образом. Вот где всплывают ошибки:
SparkController *_controller;
Похоже, он пытается разобрать эту строку как код C ++?
Класс SparkController.h и SparkController.mm полностью написаны на Objective-C, я даже не включаю Box2D в класс, потому что он не нужен. Чтобы увидеть, была ли проблема с .mm, я попытался изменить SparkController.mm на .m, и компилятор выдал 200 ошибок, прежде чем сдаться. Так что я понятия не имею, что я могу делать неправильно. Какой другой код было бы полезно разместить здесь, чтобы помочь диагностировать проблему?
РЕДАКТИРОВАТЬ: Спасибо за все комментарии ниже. К сожалению, ни одно из ваших предложений не сработало. Я включаю файл заголовка для SparkController.h, возможно, он поможет указать, что я сделал неправильно:
#import "cocos2d.h"
#import "HelloWorldLayer.h"
@interface SparkController : NSObject {
BOOL _drawPreviewLine;
CGPoint _touchStartLocation;
float _previewAngle;
float _sparkAngle;
CCParticleSystemQuad *_spark;
}
@property (nonatomic, assign) BOOL drawPreviewLine;
@property (nonatomic, assign) CGPoint touchStartLocation;
@property (nonatomic, assign) float previewAngle;
@property (nonatomic, assign) float sparkAngle;
@property (nonatomic, retain) CCLayer *layer;
//+(id)initWithLayer:(CCLayer *)layer;
@end
@interface GestureController : SparkController{
}
+(id)initWithLayer:(CCLayer *)layer;
-(void)touchBeganAt:(CGPoint)touchStartLocation;
-(void)touchMovedTo:(CGPoint)touchLocation;
-(void)touchEndedAt:(CGPoint)touchLocation;
@end
@interface HybridController : SparkController{
}
+(id)initWithLayer:(CCLayer *)layer;
@end
@interface TouchController : SparkController{
}
+(id)initWithLayer:(CCLayer *)layer;
@end
Вот соответствующая часть HelloWorldLayer.h, если это поможет:
#import "cocos2d.h"
#import "Box2D.h"
#import "MyContactListener.h"
#import "GLES-Render.h"
#import "SparkController.h"
// HelloWorldLayer
@interface HelloWorldLayer : CCLayer
{
...
SparkController *_controller;
}