我正在研究Cocos2D和Box2D遊戲。我剛剛爲遊戲界面創建了一個類,以便玩家可以選擇不同的控件類型。因爲我使用的Box2D的物理學似乎所有的類必須.mm而不是.M - 但是當我去定義HelloWorldLayer.h新的控制器對象,我得到以下錯誤:關於Objective-C對象聲明的C++錯誤?
「ISO C++禁止沒有類型的'SparkController'聲明「。 和 「預期」;「 '*'令牌之前。
我發現了幾篇文章,其中人們得到了類似的錯誤,但都是非常不同的情況。我明白這是可能由許多不同問題引起的一般性錯誤之一。
HelloWorldLayer.h中的SparkController實例的聲明如下所示。這是錯誤彈出:
SparkController *_controller;
所以seeems像它試圖解析這條線作爲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;
}
'HelloWorldLayer.h'是否導入'SparkController.h'?另外,'SparkController.h'是否導入'HelloWorldLayer.h'? – 2012-02-02 08:43:26
是的,是的。感謝您檢查:-) – 2012-02-02 23:09:37