AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Units überkreuzen

Ein Thema von Christian18 · begonnen am 15. Mär 2008 · letzter Beitrag vom 16. Mär 2008
Antwort Antwort
Christian18

Registriert seit: 9. Dez 2003
Ort: Hamburg
1.279 Beiträge
 
#1

Units überkreuzen

  Alt 15. Mär 2008, 22:22
Hallo,

bisher habe ich immer gedacht, dass man zwei Units nicht überkreuzen kann. Heute wurde ich eines besseren belehrt.
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Unit2;

...
Delphi-Quellcode:
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Unit1;
--> So kannte ich es bisher immer. Das funktioniert auch nicht. Es kommt folgende Meldung:
[Pascal Fataler Fehler] Unit1.pas(7): F2047 Zirkuläre Unit-Referenz auf 'Unit1'

Wenn ich es aber so mache, dann funktioniert es:

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm1 = class(TForm)
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

uses Unit2;

{$R *.dfm}

end.
Delphi-Quellcode:
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm2 = class(TForm)
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form2: TForm2;

implementation

uses Unit1;

{$R *.dfm}

end.
Meine Frage ist nun, ob das ein Bug in Delphi ist oder steckt das vieleicht auch ein sinn dahinter?

Warum gehte es nicht wenn ich die Unit oben einbinde und wenn ich es unten mache, dann geht es?!?!?!

Das verwirrt mich jetzt ein bisschen...

Wer kann meine dunklen stellen ein bisschen beleuchten?

MFG Christian18
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Units überkreuzen

  Alt 15. Mär 2008, 22:25
So geht es zwar. Man sollte es aber vermeiden und gemeinsam Verwendetes in eine Unit auslagern, welche man dann in die anderen einbindet.
Markus Kinzler
  Mit Zitat antworten Zitat
1234588

Registriert seit: 14. Jan 2007
Ort: Stuttgart
164 Beiträge
 
#3

Re: Units überkreuzen

  Alt 15. Mär 2008, 22:29
hat soweit ich weiß mit der initialisierung der units zu tun. soll angeblich in einer endlosschleife ausarten. kann mich aber auch irren, bin mir da nicht sicher
  Mit Zitat antworten Zitat
Andy090778

Registriert seit: 14. Mai 2006
23 Beiträge
 
Delphi 5 Standard
 
#4

Re: Units überkreuzen

  Alt 16. Mär 2008, 01:17
Die Antwort ist einfach:

Die Uses-Klausel im Abschnitt Interface sorgt dafür, dass in jeder anderen Unit überall alle Deklarationen der betreffenden Unit gültig sind. Erfolgt hier eine Überkreuzung, würde dies zu einer Endlosschleife führen.

Im Abschnitt Implemenatation gilt dies nur für den darin liegenden Code - und die Funktionen darin haben keine Typdeklaration von außen...
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von Corpsman
Corpsman

Registriert seit: 8. Nov 2005
Ort: nähe Stuttgart
981 Beiträge
 
Delphi XE2 Professional
 
#5

Re: Units überkreuzen

  Alt 16. Mär 2008, 09:48
Man kann diese überkreuzenden Units aber immer ausbauen.

Selbst wenn du Klassenmethoden hast die Varaiblentypen aufrufen die sich dann überkreuzen würden.

Ist mir daletzt passiert.

Du bindest die Unit dann unterhalb von Implementation ein und machst nur Pointer mit Type casts ( Unschön )

besser ist aber mkinzlers vorschlag das entsprechend in nur eine Unit aus zu lagern.
Uwe
My Sitewww.Corpsman.de

My marble madness clone Balanced ( ca. 70,0 mb ) aktuell ver 2.01
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:48 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