【问题标题】:DCC error : published field is not a class or interface typeDCC 错误:发布的字段不是类或接口类型
【发布时间】:2012-12-06 03:18:46
【问题描述】:

我不断收到以下 DCC 错误,发布的字段“名称”不是以下类的类或接口类型。

  TGroup = class
    name:string[32]; <<<========================
    rwFeatures:TFeatures;
    roFeatures:TFeatures;
    levels:TLevels;   
  private

  public
    constructor Create;
    procedure Read(var f:file);
    procedure ReadOld(var f:file);
    procedure Write(var f:file);   
  end;

什么意思?

【问题讨论】:

    标签: delphi class interface syntax-error field


    【解决方案1】:

    在启用Emit runtime type information 设置的情况下编译该类。当使用运行时类型信息编译类时,默认可见性为published。这意味着短字符串字段是published。并且不允许发布短字符串字段。

    documentation 说:

    只有类或接口类型的字段才能发布。

    这是一个相当严格的要求。例如,这意味着您不能发布整数或布尔字段。

    我怀疑这个限制是因为已发布字段的主要用途是对象引用。想想表单上的组件。

    使用以下选项之一解决问题:

    1. 不要发出此类的运行时类型信息。
    2. 将短字符串字段公开而不是发布。
    3. 使用属性而不是字段。

    【讨论】:

    • 我删除了我之前的评论,因为它具有误导性。它将使用{$M-} 进行编译,不是因为发布的字段可以具有短字符串类型,而是因为没有明确可见性的字段不会被发布。
    • @hvd 是的,你说得很对。在你解释之前,我误解了这一点。谢谢。
    • @hvd 我在这个问题上了解到我完全误解了published 的所有细节。再次感谢您为我指明正确的方向。阅读了优秀的文档后,我和你们其他人不在同一页上!
    猜你喜欢
    • 2012-05-20
    • 1970-01-01
    • 2014-08-26
    • 1970-01-01
    • 2011-12-22
    • 2012-05-13
    • 2019-12-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多