可能重复:
How can I solve this Problem with bidirectional dependencies in Objective-C classes?
为什么我会使用以下代码获得“解析问题 - 预期类型”,如何解决问题(不更改测试函数的API)?
// ClassA.h
#define CLASSA_H
#import <Foundation/Foundation.h>
#ifndef CLASSB_H
#import "ClassB.h"
#endif
@interface ClassA : NSObject {}
- (void)test:(ClassB *)input; // Compiler error: Expected ClassB to be a type
@end
和
// ClassB.h
#define CLASSB_H
#import <Foundation/Foundation.h>
#ifndef CLASSA_H
#import "ClassA.h"
#endif
@interface ClassB : NSObject{}
- (void)test:(ClassA *)input; // Compiler error: Expected ClassA to be a type
@end
基于我读到的关于import和include的内容,我甚至不必使用CLASSA_H和CLASSB_H宏来防止自包含,但无论我是否使用它们,我都会得到同样的错误。
我的实际代码比上面的示例更复杂,但它归结为我的两个类的接口相互引用,因此要求每个头包含另一个,如上例所示。这是C中的常见情况,我不会得到我在这里缺少的东西。
答案 0 :(得分:2)
您不需要包含任何标头。使用forward declaration。
// ClassA.h
#import <Foundation/Foundation.h>
@class ClassB;
@interface ClassA : NSObject {}
- (void)test:(ClassB *)input;
@end
和
// ClassB.h
#import <Foundation/Foundation.h>
@class ClassA;
@interface ClassB : NSObject {}
- (void)test:(ClassA *)input;
@end
根据您的具体情况,您可能还需要#import "ClassA.h"
内ClassB.m
,反之亦然。但这不会引起任何其他问题。