2011-08-04 55 views
2

我有ForceGaugeViewController class和ForceGaugeController class。我試圖讓ForceGaugeController類成爲ForceGaugeViewController的一個子類,但是我收到了錯誤。實現類:找不到超類

錯誤:

Cannot find interface declaration for ForceGaugeViewController superclass of ForceGaugeController class.

ForceGaugeViewController.h

#import <UIKit/UIKit.h> 
#import <math.h> 
#import "HardwareController.h" 
#import "ForceGaugeController.h" 

@interface ForceGaugeViewController : UIViewController{ 
} 
end 

ForceGaugeViewController.m

#import "ForceGaugeViewController.h" 

@implementation ForceGaugeViewController 

ForceGaugeController.h

#import <Foundation/Foundation.h> 
#import "ForceGaugeViewController.h" 
#import "FMDatabase.h" 
#import "FMResultSet.h" 

@class ForceGaugeViewController; 

// error here 
@interface ForceGaugeController : ForceGaugeViewController{ 
} 
@end 

ForceGaugeController.m

#import "ForceGaugeController.h" 

回答

7

你不僅可以向前引用類,你將繼承或者你將實施的協議。您只需要在已經完成的標題中導入超類,然後刪除@class聲明。

編輯:另外,超類ForceGaugeViewController不應在頭文件中包含子類ForceGaugeViewController

ForceGaugeController.h

#import <Foundation/Foundation.h> 
#import "ForceGaugeViewController.h" 
#import "FMDatabase.h" 
#import "FMResultSet.h" 

@interface ForceGaugeController : ForceGaugeViewController{ 
} 
@end 
+0

爲什麼你會' #import「ForceGaugeController.h」到'ForceGaugeController.h'中? – Mundi

+0

您不能只轉發聲明您將繼承的類或您將實現的協議。這兩種做法都不違法(雖然風格不好)。 –

+0

@Joe謝謝。我沒有注意到我在超類頭文件中有子類。有效。 – ilaunchpad

0

你包括ForceGaugeController.h在ForceGaugeViewController.h 和包括ForceGaugeViewController.h在ForceGaugeController.h。循環包括會混淆編譯器,這可能是錯誤的。

一個類的頭文件只需要包含框架(即UIKit),子類和類遵循的任何協議。前向聲明將用於實例實例變量/方法參數/屬性的類。

0

刪除行:

@class ForceGaugeViewController; 

通過其頭文件在你ForceGaugeController.m文件的頂部您已經導入ForceGaugeViewController類。


編輯1

以及由@克里斯德弗羅指出,你有你的頭文件循環引用,你會想擺脫這一點。


EDIT 2

而且不知道我怎麼錯過了你的ForceGaugeController.h文件中的自營進口。我認爲這是一個錯字,但如果不是,我相信你知道你必須刪除它。

+0

謝謝。那是一個錯誤。 – ilaunchpad

4

一定要避免圓形進口: 確保不導入頭的任何或實現的是繼承文件到超文件,其中超接口聲明(h文件)