Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 如何声明两个相互链接的类?_Delphi_Delphi Xe2 - Fatal编程技术网

Delphi 如何声明两个相互链接的类?

Delphi 如何声明两个相互链接的类?,delphi,delphi-xe2,Delphi,Delphi Xe2,我有一个类似的问题,但在德尔菲 type TThreadPopulator = class(TThread) private _owner:TASyncPopulator; //Undeclared identifier end; type TAsyncPopulator = class private _updater: TThreadPopulator; end; 上述问题的解决方案不适用于delphi在任何类定义之前使用此选项。Forward类在

我有一个类似的问题,但在德尔菲

type
  TThreadPopulator = class(TThread)
  private
    _owner:TASyncPopulator; //Undeclared identifier
  end;

type
  TAsyncPopulator = class
  private
    _updater: TThreadPopulator;
  end;

上述问题的解决方案不适用于delphi

在任何类定义之前使用此选项。Forward类在Delphi 2010中工作。我不知道你们的德尔菲的女巫版本,但这是我能想到的唯一解决方案

type   
 TAsyncPopulator = Class;
希望我能帮助您查看文档

type (* start type section - one unified section "to rule them all" *)
  TAsyncPopulator = class; (* forward declaration *)

  TThreadPopulator = class(TThread)
  private
    _owner:TASyncPopulator;
  end;

  TAsyncPopulator = class (* final declaration - WITHIN that very section where forward declaration was made *)
  private
    _updater: TThreadPopulator;
  end;

使用来源,卢克!您的Delphi安装有完整的VCL和RTL源代码供您阅读、观看和学习。它经常使用这个模板。每次当你问自己“我怎么能做到”时,只要想想“Borland是怎么做到的”,很有可能你已经在Delphi提供的源代码中得到了一个现成的例子。

除了使用转发声明,你还可以创建一个子类来解决这个问题:

TThreadPopulator = class(TThread)
  type 
    TAsyncPopulator = class 
      _updater: TThreadPopulator;  
    end;

  var 
    owner: TAsyncPopulator;
end;

我试过了。但是它给出了error[DCC error]Populator.pas(10):E2086类型“TASyncPopulator”尚未完全定义。我正在使用DelphiXE2@NiyokoYuliawan它应该适用于您的delphi版本,所以请检查语法是否有误。@Niyoko-因为您过早地结束了类型部分。正向声明在单个区段范围内工作。阅读有关类型声明的Delphi手册。另外,上面还有“重新标记”链接。一般认为,在generic
delphi
tag之外再加上您的确切delphi版本的标记是正确的。它会产生错误[DCC error]Populator.pas(12):E2086类型“TasyncOpulator”尚未完全定义。我使用的是delphi Xe2,你是否真的使用了这段代码而没有自己的代码?这是几乎可以在每个VCL单元(如控件、窗体等)中使用的模式。此代码在XE2 Update 4修补程序1中编译。你的代码有些不同——仔细检查。很可能您关闭了一个类型节而过早地启动了另一个类型节。转发声明和最终声明不能分为单独的部分。我想你只是把你的旧代码和我的代码混在一起了。@Arioch'不,5分钟的宽限期从你第一次发布答案时开始。就这样。在发布后的前5分钟内,所有编辑都不会记录在修订历史记录中。与其“使用来源”,不如通过解释转发声明的工作原理,并通过“转发声明必须通过在同一类型声明部分中定义同一类的声明来解决。”相关文档如下: