Objective-C一个.h和.m中的多类定义

Objective-C一个.h和.m中的多类定义,objective-c,Objective C,我有两个子类,一个有很多定制,我们称之为Foo,另一个子类只需要重写一个方法,不需要任何额外的变量,我们称之为Bar Bar将是Foo的变量之一,因此为了避免再使用两个文件(.m和.h代表Bar),我希望在Foo的.h和.m文件中接口并实现Bar 我的最大努力给了我几个编译器错误 .h文件如下所示: #import <UIKit/UIKit.h> @interface Foo : FooSuperClass { Bar *barVariable; } @property

我有两个子类,一个有很多定制,我们称之为Foo,另一个子类只需要重写一个方法,不需要任何额外的变量,我们称之为Bar

Bar将是Foo的变量之一,因此为了避免再使用两个文件(.m和.h代表Bar),我希望在Foo的.h和.m文件中接口并实现Bar

我的最大努力给了我几个编译器错误

.h文件如下所示:

#import <UIKit/UIKit.h>

@interface Foo : FooSuperClass {
    Bar *barVariable;
}

@property (nonatomic, retain) Bar *barVariable;

-(void) fooMethod;
@end

@interface Bar : BarSuperClass {
}

@end
#import "Foo.h"


@implementation Foo
@synthesize barVariable;

-(void) fooMethod{
  //do foo related things
}
@end

@implementation Bar
- (void)barSuperClassMethodIWantToOverride{
}
@end
我意识到这类事情通常都会受到反对,但我觉得这在我的情况下是合适的。我得到的第一个错误是“条前的预期说明符限定符列表”


我做错了什么,我很确定在一个文件中可能有多个声明/定义。

在声明之前,您在标题中使用了
Bar
。解决方案:将
Bar
的定义放在
Foo
之前。

编译器只考虑它以前见过的有效类型。正如尼古拉提到的,您可以在
Foo
之前声明
Bar

然而,这并不总是可能的。对于其他情况,可以使用
@class
向前声明类


@类条
告诉编译器存在一个名为Bar的类,指向Bar的指针应被视为有效。

通常最好使用
@class
指令。例如,如果在
Bar
中声明了类型为
Foo
的实例变量,会发生什么情况?
@class Bar;
@interface Foo : NSObject
{
    Bar *bar;
}
@end