0
可能重复:
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
根据我了解的进口对包括,我不应该甚至必须使用CLASSA_H和CLASSB_H宏来防止自包含的,但无论我使用它们或不使用,我会得到同样的错误。
我的实际代码比上面的示例更复杂,但归结为我有两个接口相互引用的类,因此需要每个头都包含另一个头,如上例所示。这是C中的一种常见情况,我没有得到我在这里失去的东西。
太好了。谢谢。只要可能,使用前向声明而不是导入是一种好的做法,或者只要我没有遇到像上面那样的问题,坚持导入就可以了吗? – Lolo
这通常是一种很好的做法。当编译器和计算机速度较慢时,这一点更为重要。直到你的项目或头文件变得巨大,这些日子里不太可能有明显的区别。我的印象是使用C++更重要,但可能会过时。 –