gpt4 book ai didi

objective-c - Objective-C 对象声明的 C++ 错误?

转载 作者:行者123 更新时间:2023-12-01 16:05:01 26 4
gpt4 key购买 nike

我正在开发 Cocos2D 和 Box2D 游戏。我刚刚为游戏界面创建了一个类,以便玩家可以选择不同的控制类型。因为我在物理中使用 Box2D 似乎所有类都必须是 .mm 而不是 .m - 但是当我在 HelloWorldLayer.h 中定义新的 Controller 对象时,我收到以下错误:

“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;

}

最佳答案

它告诉你它不能识别 SparkController .似乎错误可能源于上面的行,或者您可能需要 class SparkController;在 HelloWorldLayer.h 的顶部。

编辑:您的问题是您要在 SparkController 中导入 HelloWorldLayer.h,在 HelloWorldLayer 中导入 SparkController.h。这是行不通的。您应该在实现 (.m) 文件中导入它们,并在 .h 文件中转发声明类。

HelloWorldLayer.h:@class SparkController;
HelloWorldLayer.m:#import "SparkController.h"
SparkController.h:@class HelloWorldLayer;
SparkController.m:#import "HelloWorldLayer.h"

关于objective-c - Objective-C 对象声明的 C++ 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9109164/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com