我有 ForceGaugeViewController 类和 ForceGaugeController 类。我正在尝试使ForceGaugeController类成为ForceGaugeViewController的子类,但我收到错误。
错误:
无法找到ForceGaugeViewController的接口声明 ForceGaugeController类的超类。
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"
答案 0 :(得分:7)
您不仅可以转发引用将继承的类或将要实现的协议。您只需要在已经执行的标头中导入超类,然后删除@class
声明。
编辑:此外,超类ForceGaugeViewController
不应在头文件中包含子类ForceGaugeViewController
。
<强> ForceGaugeController.h 强>
#import <Foundation/Foundation.h>
#import "ForceGaugeViewController.h"
#import "FMDatabase.h"
#import "FMResultSet.h"
@interface ForceGaugeController : ForceGaugeViewController{
}
@end
答案 1 :(得分:5)
请务必避免循环导入: 确保不要将任何头或实现子类文件导入到超类接口声明所在的超类文件中(.h文件)
答案 2 :(得分:0)
您在ForceGaugeViewController.h中包含ForceGaugeController.h 并在ForceGaugeController.h中包含ForceGaugeViewController.h。循环包含会混淆编译器,这可能是错误的。
类的头文件只需要包含框架(即UIKit),子类以及类符合的任何协议。前向声明将对实例实例变量/方法参数/属性的类进行。
答案 3 :(得分:0)
删除该行:
@class ForceGaugeViewController;
您已经通过ForceGaugeController.m文件顶部的头文件导入 ForceGaugeViewController 类。
编辑1
正如@Chris Devereux指出的那样,你的头文件中有一个循环引用,你也想要摆脱它。
编辑2
不确定我是如何错过ForceGaugeController.h文件中的自导入的。我认为这是一个错字,但如果不是,我确定你知道你必须删除它。