我遇到了一个似乎非常经典的问题:一个项目和一个集合类,两者都互相引用,需要前向声明。我正在使用 Delphi 2010 更新 5。
这适用于非泛型类,但我无法解决泛型类型的 E2086 错误:
type
// Forward declarations
TMyElement = class; // E2086: Type 'TMyElement' is not yet completely defined
TMyCollection<T:TMyElement> = class
//
end;
TMyElement = class
FParent: TMyCollection<TMyElement>;
end;
切换类声明顺序时也会出现同样的问题。
我在此处或 QualityCentral 中没有找到任何对此问题的引用(发现了 E2086 的其他问题,但与此用例无关)
我现在唯一的解决方法是将父级声明为 TObject,并在需要时将其转换为集合泛型类型(不是一个干净的解决方案......)
您是如何解决这个问题的,或者是如何前向声明您的泛型类的?
Thanks,
[2011 年 10 月 22 日编辑] QualityCentral 的后续行动:我在质量中心报告了这个错误here http://qc.embarcadero.com/wc/qcmain.aspx?d=94044
EMB 最近已关闭该问题,解决状态如下:
分辨率:按设计
在构建中解决:16.0.4152
我只有 Delphi 2010。有人可以确认它已在 Delphe XE2 Update1 中修复吗?或者这是否意味着它“按预期”工作?
[编辑2011年10月23日] EMB的最终答复:EMB 今天确认,实际的 Delphi 编译器不支持使用泛型类型的前向声明。您可以通过上面提供的链接在 QC 中查看他们的答案。