關於一個交叉引用Bug can not find interface declaration
阿新 • • 發佈:2018-12-20
這是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,這就構成了交叉引用。不過編譯器卻給出了一個讓人混淆不清的提示“找不到父類介面”。