@class之后"找不到接口声明错误..."

Gri*_*ess 12 xcode objective-c

我遇到了一个似乎对我没有任何意义的Objective-C问题.我是一个相对精通的ObjC程序员,理解整个"前瞻性宣言"的概念,但这个让我摸不着头脑.所以这是交易:

ClassA是我的Xcode项目中的一个类,它只是项目.ClassB是ClassA的子类,它是公共的,并导入到我的框架的头文件中.

我正在建立一个"无法找到'ClassA'的接口声明,'ClassB'的超类......"错误.我已经@class ClassA;在ClassB.h中提出了前向声明,但这似乎并没有解决问题.当我更改@class ClassA;#import ClassA.h,它工作正常.但是,由于ClassA只是项目,因此依赖项目无法构建ClassB,因为它无法访问ClassA的源代码.

任何帮助将不胜感激,我希望这是有道理的.谢谢!

Vit*_*y A 37

问题是你的#imports中有一个无限循环.解决方案:所有#imports都进入实现文件,所有需要的类都在.h文件中声明.


bbu*_*bum 10

要为类创建子类,超类的完整声明必须可供编译器使用. @class只是启用对所述类的实例的引用 - 允许A *foo;.

子类化需要更多的元数据(至少,它是在遗留运行时下完成的 - 我认为有可能在没有完整的超级@interface的情况下支持子类化.技术上可行,但可能没用.)


Rub*_*con 6

我有一个答案:您必须检查'#import'订单.在使用超类之前,应该导入并编译它.