您的位置:首页 > 其它

关于一个交叉引用Bug:“can not find interface declaration”

2011-11-23 13:36 471 查看
这是GCC编译器的一个Bug,与Xcode4.2或者3.2无关。在Xcode的任何版本都会报这个错误。
你有一个类A:
#import <Foundation/Foundation.h>
#import "B.h"
@interface A : NSObject
@end

#import "A.h"
@implementation A
@end
还有一个类B:
#import <Foundation/Foundation.h>
#import "A.h"
@interface B : NSObject
@end
#import "B.h"
@implementation B
@end
然后你决定从A继承一个类,子类C:
#import "A.h"
@interface C : A
@end

#import "C.h"
@implementation C
@end
一切,OK,编译通过。然后你决定让B也继承A:
#import <Foundation/Foundation.h>
#import "A.h"
@interface B : A
@end
这时候问题来了,编译器告诉你“can not find interface of declaration for ‘A’,superclass of ‘B’”。
怎么可能?B中明明import了A.h,而且通过command键+鼠标左键,也可以从B中找到A的接口声明。你尝试了各种方法,就是找不到问题出在哪里。而且C同样是A的子类,C和B除了类名外,代码没有任何不同。难道Cocoa限制了一个类的子类数量?一个子类可以继承,第2个就不行?
不用大惊失色。问题在于A中import了B.h,而B又引用了A,这就构成了交叉引用。不过编译器却给出了一个让人混淆不清的提示“找不到父类接口”。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐