Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.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 - Fatal编程技术网

Delphi 德尔菲循环单位参考

Delphi 德尔菲循环单位参考,delphi,Delphi,我有一个类间循环引用的问题。以下是错误: [dcc32致命错误]StackWeb.MessageClassHelper.pas(5):F2047循环单元引用到“StackWeb.MessageClass” 我想在不同的单元中使用这两个类 我该怎么解决呢 unit StackWeb.MessageClass; interface uses StackWeb.ChatItemClass, type TMessageClass = class(TCardDefault) pr

我有一个类间循环引用的问题。以下是错误:

[dcc32致命错误]StackWeb.MessageClassHelper.pas(5):F2047循环单元引用到“StackWeb.MessageClass”

我想在不同的单元中使用这两个类

我该怎么解决呢

unit StackWeb.MessageClass;

interface

uses
  StackWeb.ChatItemClass,

type    
  TMessageClass = class(TCardDefault)
  private
    FChat : TChatItemClass;
  public
    property chat : TChatItemClass read FChat write FChat;
  end;

unitstackweb.ChatItemClass;
接口
使用
StackWeb.MessageClass;
类型
TChatItemClass=class(TClassStandardList)
私有的
f消息:焦油;
公众的
属性消息:TArray read FMessages write FMessages;
结束;
声明
TMessageClass
类不需要知道如何声明
TChatItemClass
类的细节,只需要知道它是一个类类型,因此使用转发声明来打破两个
接口
部分的循环单元依赖性,例如:

unitstackweb.MessageClass;
接口
{用途
StackWeb.ChatItemClass;}
类型

TChatItemClass=class;//您能够成功获得循环引用单元的唯一方法是,如果其中一个使用
实现
部分中的“已使用”而不是
接口
@Jerry Dodge,我不能这样做,因为我需要在界面中使用section@LuizAlves转发声明是打破循环单元依赖性的唯一方法,而无需重新设计类,使它们在任何时候都不相互依赖all@Remy勒布谢谢你,雷米,但它不起作用。我得到[dcc32错误]StackWeb.ChatItemClass.pas(10):E2086类型“TMessageClass”尚未完全删除defined@LuizAlves这是因为您在泛型内部使用
TMessageClass
,而泛型不适用于部分类型。我更新了我的答案。您应该只需要在非泛型侧使用forward声明来打破循环单位依赖关系。@Remy Lebeau我在类中使用不同的单位。你的职位对我不起作用。我已经读过关于embarcadero的笔记了。David发布的所有链接都不能解决我的问题problem@remy不会。代码不会编译,因为您有一个前向定义,但在该类型部分的后面没有定义。
unit StackWeb.ChatItemClass;

interface

uses
  StackWeb.MessageClass;

type    
  TChatItemClass = class(TClassStandardList<TMessageClass>)
  private
    FMessages : TArray<TMessageClass>;
  public
    property messages : TArray<TMessageClass> read FMessages write FMessages;
  end;
type className = class;