저는 Cocos2D와 Box2D 게임을하고 있습니다. 플레이어가 다른 컨트롤 유형을 선택할 수 있도록 게임 인터페이스 용 클래스를 만들었습니다. 물리학을 위해 Box2D를 사용하고 있기 때문에 모든 클래스는 .m 대신에 .mm이어야합니다.하지만 HelloWorldLayer.h에서 새 컨트롤러 객체를 정의 할 때 다음 오류가 발생합니다.Objective-C 오브젝트 선언에 C++ 오류가 있습니까?
"ISO C++ Forbids 타입이없는 'SparkController'선언. 및 "예상 됨", ' before '*'토큰 ".
사람들이 비슷한 오류를 범했지만 모든 상황이 매우 다른 여러 기사를 발견했습니다. 나는 이것이 많은 다른 문제들로 인해 야기 될 수있는 일반적인 오류 중 하나라는 생각을 갖습니다.
HelloWorldLayer.h의 My SparkController 인스턴스 선언은 다음과 같습니다. 오류가 나타나는 곳입니다 :
SparkController *_controller;
그래서이 줄을 C++ 코드로 구문 분석하는 것처럼 보입니까? SparkController.h 및 SparkController.mm 클래스는 모두 Objective-C로 작성되었으며 필요하지 않기 때문에 클래스에 Box2D를 포함하지 않았습니다. .mm이 문제인지 확인하기 위해 SparkController.mm을 .m으로 변경해 보았습니다. 컴파일러는 포기하기 전에 200 개의 오류를 던졌습니다. 그래서 나는 내가 뭘 잘못하고 있는지 전혀 모른다. 문제를 진단하는 데 도움이되도록 여기에 게시하는 것이 다른 어떤 코드가 유용할까요?
편집 : 아래의 모든 의견을 보내 주셔서 감사합니다. 불행히도 귀하의 제안은 효과가 없습니다.
#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'를 임포트합니까? –
예, 예. 확인해 주셔서 감사합니다 :-) –