【问题标题】:Can't get a forward class declaration to work in Delphi 2010无法在 Delphi 2010 中获得前向类声明
【发布时间】:2010-01-26 01:33:05
【问题描述】:

我完全无法在 Delphi 2010 中获得类声明。我已经阅读了文档,在网上阅读过,也许我是个白痴,但我无法编译任何东西。任何帮助将不胜感激!

我已经完成了这两个米老鼠类。当然我知道他们需要构造函数等才能真正工作,这只是我遇到的问题的一个演示。

我有一个 MyParent 类,其中包含我的另一个类 MyChild 的 TList。没关系。但是在 MyChild 内部,我希望能够设置对其父对象的引用,而不是 TList 而是我的 MyParent 类。

unit ForwardClassDeclarationTest;

interface

uses generics.collections;        

type
  MyChild = Class
  private
    ParentObect:MyParent;   <--I need to be able to make this accessable
  public
End;

type
  MyParent = Class
  public
    tlChildren:TList<MyChild>;
End;

implementation

end.

我需要在这两个类之前创建一个前向声明,但我完全无法进行任何操作。提前感谢任何愿意帮助我的人。

【问题讨论】:

    标签: delphi


    【解决方案1】:

    @csharpdefector 试试这段代码

    uses
      Generics.Collections;
    
    type
       MyParent = Class;   // This is a forward class definition
    
      MyChild = Class
      private
        ParentObect:MyParent;
      public
      End;
    
      MyParent = Class // The MyParent class is now defined
      public
        tlChildren:TList<MyChild>;
      end;
    
    implementation
    
    end.
    

    有关更多信息,您可以在delphibasics 中查看此link

    【讨论】:

    • 是的,谢谢!我没有把这两个类放在同一个类型语句 ty 下。
    • @Jim:他们确实需要在相同的type关键字下,否则你会遇到“未完全定义”的编译器错误。请参阅泥工的答案。
    【解决方案2】:

    在声明 MyChild 之前,输入:MyParent = class;,然后声明 MyChild。然后正确声明 MyParent。并且不要重复使用 type 关键字。它表示一个类型声明块,而不是一个单独的类型声明,并且类前向声明​​只在同一个块内起作用。

    【讨论】:

    • 谢谢梅森,我明白了。正如你提到的,我没有把我的两个类放在同一个类型块中。
    猜你喜欢
    • 2011-08-28
    • 2013-05-07
    • 1970-01-01
    • 2013-06-02
    • 2021-12-25
    • 2011-05-08
    • 1970-01-01
    相关资源
    最近更新 更多