我在Objective-C中遇到一些奇怪的编译器错误:
iBody.h:18: error: ISO C++ forbids declaration of 'iObject' with no type
#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
#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
最佳答案
好像您正在导入循环中,因为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"
iObject.h
,并且由于没有头链接到iBody.mm
,此问题已解决。另外,请记住在使用Box2D时将实现文件重命名为.mm
(Obj-C/C++),这使我时不时发现:)
https://stackoverflow.com/questions/9655223/