use*_*561 14 delphi generics forward-declaration
我遇到了一个看似非常经典的问题:一个项目和一个集合类,它们都相互引用,需要一个前向声明.我正在使用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,并在需要时将其强制转换为集合泛型类型(不是一个干净的解决方案......)
您是如何解决此问题,或者向前声明您的泛型类的?
谢谢,
[编辑2011年10月22日]跟进QualityCentral: 我在这里报告了质量中心的这个错误
EMB最近已经关闭,其解决方案状态如下:解决方案:已设计已解决的内容:16.0.4152
我只有Delphi 2010.有人可以确认它已在Delphe XE2 Update1中修复,还是意味着它按预期工作?
[编辑2011年10月23日] EMB的最终答案: EMB今天证实,实际的Delphi编译器不支持使用泛型类型的前向声明.你可以在QC中看到他们的回答,上面提供的链接.
Ond*_*lle 13
你可以通过声明一个祖先类来解决它:
type
  TBaseElement = class
  end;
  TMyCollection<T: TBaseElement> = class
  end;
  TMyElement = class(TBaseElement)
  private
    FParent: TMyCollection<TBaseElement>;
  end;
| 归档时间: | 
 | 
| 查看次数: | 4037 次 | 
| 最近记录: |