未知类型,即使我是导入

时间:2012-09-29 11:01:25

标签: ios cocos2d-iphone

我收到了这个错误,

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。

我无法弄清楚我错过了什么。

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

你有一个递归导入:“BoxSprite.h”导入“ArrowWrapper.h”,反之亦然。

您必须删除其中一个import语句,然后使用@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类,导致编译错误。
  5. import替换@class解决了这个问题,因为它在不读取接口文件的情况下使编译器知道ArrowWrapper类。

答案 1 :(得分:0)

我认为问题在于导入声明。

您正在BoxSprite.h中导入#import "ArrowWrapper.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