-2

このエラーが発生します。

Unknown type name ArrowWrapper

内部からBoxSprite.h

#import <Foundation/Foundation.h>
#import "cocos2d.h"
#import "BoxSum.h"
#import "ArrowWrapper.h"

@interface BoxSprite : CCSprite {

}
@property ArrowWrapper* arrowItem;
@end

また、これをArrowWrapper.h含みます。

#import "cocos2d.h"
#import "BoxSprite.h"

@interface ArrowWrapper : CCMenuItem {

}

@property BoxSprite* box;
@end

エラーは以前は ArrowWrapper にあり、クリーンアップを行うまで BoxSprite が見つからないというものでしたが、現在は BoxSprite にあり、ArrowWrapper が見つからないと言っています。

何が欠けているのかわかりません。

助けてくれてありがとう。

4

2 に答える 2

2

再帰的なインポートがあります。「BoxSprite.h」は「ArrowWrapper.h」をインポートし、その逆も同様です。

importステートメントの1つを削除して、@class代わりに使用する必要があります。たとえば、「BoxSprite.h」で置換

#import "ArrowWrapper.h"

@class ArrowWrapper;

その後、必要に応じて、実装ファイル「BoxSprite.m」に「ArrowWrapper.h」をインポートできます。

詳細な説明: Xcodeは「BoxSprite.h」にエラーを表示しますが、実際には「ArrowWrapper.m」のコンパイル時にエラーが発生します。

  1. 「ArrowWrapper.m」は「ArrowWrapper.h」をインポートします。
  2. 「ArrowWrapper.h」は、ArrowWrapperクラスを定義する前に「BoxSprite.h」をインポートします。
  3. 「BoxSprite.h」は「ArrowWrapper.h」をインポートします。ただし、「ArrowWrapper.h」はすでにインポート済みとしてマークされているため、コンパイラはそれを再度読み取りません。
  4. したがって、「BoxSprite.h」を読み取るとき、ArrowWrapperクラスはまだ定義されておらず、コンパイラエラーが発生します。

で置き換えると、インターフェイスファイルを読み取らずにその時点でコンパイラにクラスが認識importされる@classため、問題が解決します。ArrowWrapper

于 2012-09-29T11:15:29.507 に答える
0

問題はインポートステートメントにあると思います。

#import "ArrowWrapper.h"BoxSprite.hにインポートし、にインポートし#import "BoxSprite.h"ていますArrowWrapper.h

したがって、BoxSprite.hを次のように変更します。

#import <Foundation/Foundation.h>
#import "cocos2d.h"
#import "BoxSum.h"

@class ArrowWrapper;
@interface BoxSprite : CCSprite {

}
@property ArrowWrapper* arrowItem;
@end
于 2012-09-29T11:16:44.097 に答える