加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – 类之间的循环引用

发布时间:2020-12-15 09:20:50 所属栏目:大数据 来源:网络整理
导读:我需要开发下一个图表类: 我写了代码,但是,有循环单元引用的问题. XmlFileManager类包含: unit XmlFileManager;interfaceuses xmldom,XMLIntf,msxmldom,XMLDoc,SysUtils,DateUtils,Classes,Dialogs,XmlEnpManager;type TXmlFileManager = class private [.
我需要开发下一个图表类:

我写了代码,但是,有循环单元引用的问题.

XmlFileManager类包含:

unit XmlFileManager;
interface
uses
  xmldom,XMLIntf,msxmldom,XMLDoc,SysUtils,DateUtils,Classes,Dialogs,XmlEnpManager;
type
  TXmlFileManager = class
  private
    [...]
    xmEnp: TXmlEnpManager;
    xmEnpInicial: TXmlEnpManager;
    xmEnpFinal: TXmlEnpManager;
[...]
end.

抽象类,XmlNodeManager:

unit XmlNodeManager;
interface
uses
  xmldom,XmlFileManager;
type
  TXmlNodeManager = class
   protected
        { sgy alias para strategy }
        sgyIterator: Integer;
        sgyContext: TXmlFileManager;
        sgyAttributes: TStringList;
        sgyNode: IXMLNode;
[...]
end.

和XmlEnpManager具体类:

unit XmlEnpManager;
interface
uses
  xmldom,XmlNodeManager;
type
  TXmlEnpManager = class (TXmlNodeManager)
    public
        constructor Create(aContext: TXmlFileManager); overload; override;
        constructor CreateInicial(aContext: TXmlFileManager); reintroduce; overload;
        constructor CreateFinal(aContext: TXmlFileManager); reintroduce; overload;
[...]
end.

构建失败并出现错误:

[dcc32 Fatal Error] XmlNodeManager.pas(7): F2047 Circular unit
reference to ‘XmlFileManager’

任何想法如何解决这个问题?

解决方法

将TXmlFileManager和TXmlNodeManager放在同一单元和相同类型的部分中,然后确保类型部分以此类开头转发:TXmlNodeManager = class;

请参阅官方文档:Forward Declarations and Mutually Dependent Classes.

unit XmlFileManagerAndXmlNodeManager;
interface
uses
  xmldom,[...]

type
  TXmlNodeManager = class;

  TXmlFileManager = class
  private
    [...]
    xmEnp: TXmlEnpManager;
    xmEnpInicial: TXmlEnpManager;
    xmEnpFinal: TXmlEnpManager;
[...]

  TXmlNodeManager = class
   protected
        sgyIterator: Integer;
        sgyContext: TXmlFileManager;
        sgyAttributes: TStringList;
        sgyNode: IXMLNode;
[...]
end.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读