1. 程式人生 > >關於一個交叉引用Bug can not find interface declaration

關於一個交叉引用Bug can not find interface declaration

               

這是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,這就構成了交叉引用。不過編譯器卻給出了一個讓人混淆不清的提示“找不到父類介面”。