2012-03-11 10 views
0

とXの宣言を禁じ:Objective-CのISO C++ iは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の拡張子を持ちます。

ありがとうございます!

答えて

1

iBodyとiObjectのヘッダーが相互にリンクしているため、インポートループのようです。通常、このような状況で、私はより高い地位であることとiBody.hに次のように使用するiObjectを検討する:

// 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++)に変更することを忘れないでください。

+0

問題を修正しました。 – blejzz

2

これは、ヘッダーファイルの円が含まれているためです。

iBody.hiObject.hに、「iObject.h」をiBody.hに含めます。あなたはそれがおよそiObject辞退されたときに知らないiBodyを見ることができるように

@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 

@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 

:だからコンパイラは、このようなものが表示されます。

このような状況を解決するには、文字列@class iObject;@interface iBody: NSObjectの前に追加し、iObject.hのインクルードをiBody.hに削除してください。しかし、インプリメンテーションファイルiBody.mでインポートする必要がありますiObject.h

関連する問題