DCC错误:已发布的字段不是类或接口类型。

4
我一直遇到以下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;

这是什么意思?

1个回答

6
该类被编译时启用了发出运行时类型信息设置。当该类被编译为运行时类型信息时,默认的可见性为published。这意味着短字符串字段是published的。而短字符串字段不允许发布。 文档中说:

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

这是一个相当严格的要求。这意味着你不能发布整数或布尔字段,例如。
我怀疑这种限制是因为发布字段的主要用途是对象引用。想象一下表单上的组件。
使用以下选项之一解决问题:
  1. 不要为此类发出运行时类型信息。
  2. 将短字符串字段设置为public而不是published。
  3. 使用属性而不是字段。

我删除了之前的评论,因为它是误导性的。它将使用{$M-}编译,不是因为已发布的字段可以具有短字符串类型,而是因为没有明确可见性的字段则不会被发布。 - user743382
@hvd 是的,你说得很对。我之前误解了,直到你刚刚解释才明白。谢谢你。 - David Heffernan
@hvd,我从这个问题中学到了一个教训,我完全误解了published周围的所有细节。再次感谢您指引我正确的方向。阅读了优秀的文档后,我和你们其他人在同一页上了! - David Heffernan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接