gpt4 book ai didi

objective-c - Objective-C ISO C++禁止声明无类型的X

转载 作者:行者123 更新时间:2023-12-02 10:50:46 25 4
gpt4 key购买 nike

我在Objective-C中遇到一些奇怪的编译器错误:

 iBody.h:18: error: ISO C++ forbids declaration of 'iObject' with no type

iObject.h
   #import "iElement.h"
#import "CCSprite.h"
#import "iBody.h"

@interface iObject : iElement
{
iBody *body;
}

-(iObject*)initElement:(CGPoint)pos
withName:(NSString*)name
zIndex:(NSInteger)z
withImage:(NSString*)image;

-(void) addBody: (iBody*) body;
-(iBody*) getBody;

@end

iBody.h
  #import "iObject.h"
#import "b2Body.h"

@interface iBody : NSObject
{
CGPoint position;
float angle;
b2Body *body;
iObject *parent;
}

-(iBody*) initElement: (CGPoint) pos
withAngle: (float) angle
withParent: (iObject*) el;

-(void) setBody: (b2Body*)bdy;
-(iObject*) getParent;

@end

有人可以解释一下为什么会发生这种情况以及如何解决它。该类的实现具有.mm扩展名。

谢谢!

最佳答案

好像您正在导入循环中,因为iBody和iObject的 header 相互链接。通常,在这种情况下,我会认为iObject的状态更高,并在iBody.h中使用以下内容:

// Replace the import to iObject.h with this:
@class iObject;

// Add the import back in iBody.mm
#import "iObject.h"

现在没有导入循环,只有iBody的实现文件实际上链接到 iObject.h,并且由于没有头链接到 iBody.mm,此问题已解决。另外,请记住在使用Box2D时将实现文件重命名为 .mm(Obj-C/C++),这使我时不时发现:)

关于objective-c - Objective-C ISO C++禁止声明无类型的X,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9655223/

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