加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

在Delphi 2010中如何设置通用类型的前向声明?

发布时间:2020-12-15 10:09:15 所属栏目:大数据 来源:网络整理
导读:我碰到一个似乎是一个非常古典的问题:一个项目和一个集合类,两个引用对象,需要一个前向声明.我正在使用更新5的Delphi 2010. 这对非通用类很好,但我无法解决E2086错误与泛型类型: type // Forward declarations TMyElement = class; // E2086: Type 'TMyEle
我碰到一个似乎是一个非常古典的问题:一个项目和一个集合类,两个引用对象,需要一个前向声明.我正在使用更新5的Delphi 2010.

这对非通用类很好,但我无法解决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上的跟进:
我在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;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读