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

我在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++),这使我时不时发现:)

https://stackoverflow.com/questions/9655223/

相关文章:

c# - 如何修复显示 “The type or namespace name X does not

syntax - D中的基本运算符重载(第2部分)

python - python程序显示编译错误

c# - 无法将类型 'IEnumerable'隐式转换为 'bool'

objective-c - 运行奇怪的错误运行 objective-c 代码

c# - 从LINQ查询返回匿名类型?

winforms - C++ CLI KeyDown::raise 错误 error C3767 候

perl - 使用中间变量访问电子表格::Read sheets时出错

python - 我类的数组给我一个错误……AttributeError : 'set' objec

f# - 'NS.Type1'类型与f#中的 'NS.Type1