可能重复:
如何在Objective-C类中使用双向依赖关系来解决此问题?
为什么我得到一个"解析问题-期望的类型"与以下代码,我可以做些什么来解决它(不改变我的测试函数的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
根据我读到的关于导入与包含的内容,我甚至不应该使用CLASSA_H和CLASSB_H宏来防止自包含,但无论我是否使用它们,我都会遇到同样的错误。
我的实际代码比上面的示例更复杂,但归根结底,我有两个类,它们的接口相互引用,因此要求每个头都包括另一个头,就像上面的示例中一样。这是C中常见的情况,我没有得到这里缺少的东西。
您不需要包含任何一个标头。使用正向声明。
// 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
根据您的情况,您可能还需要在ClassB.m
中使用#import "ClassA.h"
,反之亦然。但这不会造成任何额外的问题。