我碰到一个似乎是一个非常古典的问题:一个项目和一个集合类,两个引用对象,需要一个前向声明.我正在使用更新5的Delphi 2010.
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,并在需要时将其转换为集合泛型类型(不是一个干净的解决方案…)
你是怎么解决这个问题的,还是转发你的泛型类呢?
谢谢,
[2011年10月22日修订] QualityCentral上的跟进:
我在here质量中心报告了这个错误
教统局最近已经封闭以下决议案:
分辨率:按设计
已解决:16.0.4152
我只有Delphi 2010.有人可以确认它已经在Delphe XE2 Update1中修复,还是意味着它按照预期工作?
[编辑2011年10月23日] EMB最终答复:
EMB今天证实,使用通用类型的forward声明不支持实际的Delphi编译器.您可以通过上面提供的链接在QC中看到他们的答案.
解决方法
你可以通过声明一个祖先类来解决它:
type TBaseElement = class end; TMyCollection<T: TBaseElement> = class end; TMyElement = class(TBaseElement) private FParent: TMyCollection<TBaseElement>; end;