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

时间:2009-10-04 15:39:39

标签: objective-c

我有两个子类,一个有很多自定义,我们称之为Foo,另一个子类只需要重写1个方法,并且不需要任何其他变量,我们称之为Bar。

Bar将是Foo的变量之一,所以为了避免再使用2个文件(.m和.h for Bar),我想在Foo的.h和.m文件中进行接口和实现。

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

.h文件如下:

#import <UIKit/UIKit.h>

@interface Foo : FooSuperClass {
    Bar *barVariable;
}

@property (nonatomic, retain) Bar *barVariable;

-(void) fooMethod;
@end

@interface Bar : BarSuperClass {
}

@end

.m文件如下所示:

#import "Foo.h"


@implementation Foo
@synthesize barVariable;

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

@implementation Bar
- (void)barSuperClassMethodIWantToOverride{
}
@end

我意识到这类事情通常会受到不满,但我觉得这在我的情况下是合适的。我得到的第一个错误是“Bar之前的预期说明符 - 限定符列表”。

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

2 个答案:

答案 0 :(得分:27)

编译器仅考虑之前看到的有效类型。正如尼古拉所说,你可以在Bar之前宣布Foo

然而,这并非总是可行的。对于其他情况,您可以使用@class转发声明该类。

@class Bar;
@interface Foo : NSObject
{
    Bar *bar;
}
@end

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

答案 1 :(得分:9)

在您的标题中,您在声明之前已使用Bar。解决方案:在Bar之前添加Foo的定义。