Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Circular unit reference (https://www.delphipraxis.net/29341-circular-unit-reference.html)

day 7. Sep 2004 20:40


Circular unit reference
 
Hallo

ich bekomme folgende Fehlermeldung:

Circular unit reference to 'ClientMain'

und zwar habe ich zwei Units (ClientMain und MainView). Im ClientMain habe ich ein MainFrame objekt welchem ich beim create ClientMain übergeben möchte.

wie kann ich das problem lösen?

Delphi-Quellcode:
unit ClientMain;

interface

uses
  Windows,
  MainView; //MainView wird benötigt damit ich MainView Objekt erzeugen kann

type
  TClientUnit = class(TForm)

  private

    mMainView : TMainFrame;
  public

  end;

var
  ClientUnit: TClientUnit;

.
.
.
procedure TClientUnit.FormCreate(Sender: TObject);
begin

    mMainView := TMainFrame.Create(self);
    mMainView.Visible := True;

end;



unit MainView;

interface

uses
  Windows,
  ClientMain; //ClientMain für den zugriff auf die Mainklasse

type
  TMainFrame = class(TForm)
  private
    { Private declarations }
  public
    procedure create(clientMain : TClientMain);
  end;


var
  MainFrame: TMainFrame;

implementation
[edit=MrSpock]Code Tags korrigiert. Mfg, MrSpock[/edit]

Luckie 7. Sep 2004 20:42

Re: Circular unit reference
 
Du kannst im implementation-Abschnitt noch einen uses-Abschnitt machen.

fkerber 7. Sep 2004 20:44

Re: Circular unit reference
 
Zitat:

Zitat von day
Hallo
Delphi-Quellcode:
unit ClientMain;

interface

uses
  Windows,
//--------> hier raus MainView; //MainView wird benötigt damit ich MainView Objekt erzeugen kann

type
  TClientUnit = class(TForm)

  private

    mMainView : TMainFrame;
  public

  end;

var
  ClientUnit: TClientUnit;

implementation
.
//------------------------------>>>>.
uses MainView;

.
procedure TClientUnit.FormCreate(Sender: TObject);
begin

    mMainView := TMainFrame.Create(self);
    mMainView.Visible := True;

end;



unit MainView;

interface

uses
  Windows,
  ClientMain; //ClientMain für den zugriff auf die Mainklasse

type
  TMainFrame = class(TForm)
  private
    { Private declarations }
  public
    procedure create(clientMain : TClientMain);
  end;


var
  MainFrame: TMainFrame;

implementation

sollte so gehen.


Ciao Frederic

day 7. Sep 2004 20:55

Re: Circular unit reference
 
wenn ich sie aber oben raus nehme, dann ist TMainFrame (MainView) im private bereich nicht mehr bekannt.



Code:
 unit ClientMain;

interface

uses
  Windows,
//--------> hier raus MainView; //MainView wird benötigt damit ich MainView Objekt erzeugen kann

type
  TClientUnit = class(TForm)

  private

    mMainView : TMainFrame;
  public

  end;

var
  ClientUnit: TClientUnit;

implementation
.
//------------------------------>>>>.
uses MainView;

.
procedure TClientUnit.FormCreate(Sender: TObject);
begin

    mMainView := TMainFrame.Create(self);
    mMainView.Visible := True;

end;

fiasko 7. Sep 2004 21:05

Re: Circular unit reference
 
Er meinte das sicher genau andersrum, also in der MainView das einbinden der ClientMain nach hinten verschieben.

day 7. Sep 2004 21:17

Re: Circular unit reference
 
Aber das problem ist doch, dass ich bei beiden units deklarationen im private bereich habe. somit muss ich die unit im ersten uses einbinden. oder sehe ich das falsch :gruebel:

fiasko 7. Sep 2004 21:20

Re: Circular unit reference
 
OK, den Parameter habe ich überlesen :-).

Dann mußt du es in eine dritte Unit auslagern.

day 7. Sep 2004 22:37

Re: Circular unit reference
 
Eine dritte Unit :pale: ? Finde ich aber nicht so toll, da ich noch in mehreren Units diese vorgehenweise verwenden möchte.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:56 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz