如何将子类声明为要在相关子类中使用的父类的属性?

时间:2009-06-10 17:59:42

标签: objective-c cocoa

我有一个小的类层次结构,我想让子类成为它的父类和所有相关子类的属性。基本上,

  • 我有一个AbstractClass GroupClass的财产。
  • GroupClass是孩子的 AbstractClass
  • UsableObjectClass是孩子的 AbstractClass并使用 GroupClass

如果我执行以下操作......

#import <Cocoa/Cocoa.h>
#import "GroupingClass.h" // I've bounced this between @class as well.
@interface myAbstractClass : NSObject {
    GroupingClass* parentGroup;
}
@property (readwrite, assign) GroupingClass* parentGroup;
@end

#import "myAbstractClass.h" // ERROR LOCATION
@implementation myAbstractClass
@synthesize parentGroup;
@end

#import <Cocoa/Cocoa.h>
@interface GroupingClass : myAbstractClass {
}
@end

#import <Cocoa/Cocoa.h>  // ERROR LOCATION IN ALL CHILD CLASSES OF AbstractClass
@interface GroupingClass : myAbstractClass {
}
@end

...我在指出的错误位置得到了这个时髦的“Line Location GroupingClass.h:3: error: cannot find interface declaration for 'myAbstractClass', superclass of 'GroupingClass'”。

我已经尝试了各种方法让它工作(是的,我知道上面的内容是完全错误的),类别和协议似乎是正确的方向,但现在变得非常岌岌可危,我真的只需要向正确的方向推..我想我错过了一些非常基本的东西(坦率地说,我对这个问题感到有点尴尬)。

我目前正在从REALbasic移植这个应用程序,这样的事情是轻而易举的;我可以添加属性作为子类,它只是工作。 Objective-C ......不是那么多。

任何帮助,即使只是一个提示,都非常感谢!

3 个答案:

答案 0 :(得分:2)

您应该能够在标头中使用@class声明,并在实现文件中导入子类的标头。

答案 1 :(得分:2)

您正在寻找的是“前瞻性声明”。在AbstractClass标题的顶部,添加

@class GroupingClass;

这告诉(不幸的是稍微过时)C编译器会有一个名为GroupingClass的类,并且它可以适当地为该类型的变量分配空间。

答案 2 :(得分:0)

您拥有所谓的循环引用或依赖关系。您的基类依赖于其子类,而子类依赖于基类。

我建议你重新考虑你的班级结构。