Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Zirkuläre Unit (https://www.delphipraxis.net/80746-zirkulaere-unit.html)

Zita1989 14. Nov 2006 17:37


Zirkuläre Unit
 
Hi,
bei mir wird immer folgender Fehler angezeigt:
[Pascal Fataler Fehler] Console.pas(5): F2047 Zirkuläre Unit-Referenz auf 'Console'
was soll ich tun???

Bitte um Hilfe

Andidreas 14. Nov 2006 17:39

Re: Hilfe!!
 
aloha...

willkommen in der dp :party:

könntest du bitte denn titel deines themas anpassen, weil hilfe braucht hier fast jeder :lol:

etwas quell text wäre glaub hilfreich ;)

Matze 14. Nov 2006 17:41

Re: Hilfe!!
 
Hallo, herzlich willkommen.

Bitte ändere den Titel in einen aussagekräftigen.

Du bindest Units, wie die Meldung sagt, zirkulär ein.
D.h. du hast Beispielsweise Unit1 und dort ganz oben in den "uses" einen Verweis auf Unit 2 und in dieser wiederum einen auf Unit 1.

Schreibe die Einbindung der Units lieber in den implementation-Abschnitt:

Delphi-Quellcode:
implementation

uses
  Unit1, ...

3_of_8 14. Nov 2006 17:41

Re: Hilfe!!
 
Ganz einfach: Du hast eine zirkuläre Beziehung zwischen zwei Units, das heißt Unit A bindet Unit B ein, Unit B bindet Unit A ein. Der Compiler weiß in dem Fall nicht, welche Unit er zuerst parsen soll.

In der OH findest du einige Problemlösungen, zum Beispiel die beiden Units zusammenzulegen oder die Referenz in einer der beiden Units in den implementation-Teil zu verschieben.

Zita1989 14. Nov 2006 17:50

Re: Hilfe!!
 
danke erst einmal für die hilfe, aber meinst du mit OH???

Gruß
Zita

3_of_8 14. Nov 2006 17:53

Re: Hilfe!!
 
Mauszeiger drüber und warten. Dann kommt die Akronym-Beschreibung.

OH ist die Onlinehilfe von Delphi, einfach deinen Fehler markieren und F1 drücken.

Sunlight7 14. Nov 2006 19:07

Re: Zirkuläre Unit
 
Zitat:

Zitat von Zita1989
hi,
was muss ich tun wenn bei mir Zirkuläre Unit angezeigt wird???

Da Du nochmals nachgefragt hast:

Das passiert, wenn sich zwei, oder mehrere Units gegenseitig in der globalen (oberen) Uses Klausel referenzieren.

Unit1:
Delphi-Quellcode:
unit Unit1;

interface

uses Unit2;

...
Unit2:
Delphi-Quellcode:
unit Unit2;

interface

uses Unit1;

...

Lösungsbeispiel (wie von Matze):
Delphi-Quellcode:
unit Unit2;

interface

implementation

uses Unit1; // Lokale Uses Klausel

end.

3_of_8 14. Nov 2006 19:38

Re: Zirkuläre Unit
 
Funktioniert nicht unbedingt.

Beispiel: Unit1 referenziert im Interface eine Typendeklaration/Variable aus Unit2, Unit2 macht das gleiche mit Unit1. Die zirkuläre Referenz lässt sich hier nicht auflösen, indem man die uses-Klausel in die implementation verschiebt, sondern nur durch Zusammenlegung der Units.

DP-Maintenance 14. Nov 2006 21:34

DP-Maintenance
 
Dieses Thema wurde von "SirThornberry" von "Programmieren allgemein" nach "Object-Pascal / Delphi-Language" verschoben.

Sunlight7 15. Nov 2006 01:10

Re: Zirkuläre Unit
 
Liste der Anhänge anzeigen (Anzahl: 1)
@3_of_8: Funktioniert doch, zumindest hier :mrgreen:

@Zita1989:

Hättest Du das gemacht, was wir Dir geraten haben, wärst Du schon weiter.
Ich hab das mal als Anhang abgehängt, um uns neue Threads zu dem Thema zu schenken...

Übrigens, der Programmierstiel ist nicht ohne, da hagelts ja Warnungen... :roteyes:
Und ein direkter Aufruf von TConsole.Irgendwas ist nicht erlaubt :warn: :wink:
Ich hab da eine Variable MyConsole rein gemacht :zwinker:

Grüßle!

Sidorion 15. Nov 2006 11:42

Re: Zirkuläre Unit
 
Zudem kann man die Typdeklaration in eine Dritte Unit auslagern, die dann beide nutzen.

Axxus 25. Apr 2007 21:46

Re: Zirkuläre Unit
 
Ok Leute ich wärm das Thema noch ma auf

Und Zwar bin ich an einem Größerem Projekt drann.

Ich habe ein Hauptformfenster und in dem Passiert eine gaaaaaanze Menge.

Dementsprechend is der Code auch lange und (trotz Tab und Kommentaren) ziemlich unübersichtlich :(

Jetzt hab ich mir einfach gedacht ich pack meinen Code Einfach in ganz viele Kleine units ab :gruebel: :idea:

Nun komm ich auch zu dem Problem Zirkulärer Fehler

Dann hab ich mir gedacht: OK ich mach mir noch ne Unit In der Einfach alle units zusammenlaufen und diese Unit bind ich dann im implenationteil bei den anderen ein Also so:

Delphi-Quellcode:
Unit Zahlen;

interface

Uses
Messages, forms ...;

implenation

Uses
Zentralverwaltung;

Procedure
.
.
.

end.
Delphi-Quellcode:
Unit Intro;

interface

Uses
Messages, forms ...;

implenation

Uses
Zentralverwaltung;

Procedure
.
.
.

end.
Delphi-Quellcode:
Unit Menu;

interface

Uses
Messages, forms ...;

implenation

Uses
Zentralverwaltung;

Procedure
.
.
.

end.
Delphi-Quellcode:
Unit Help;

interface

Uses
Messages, forms ...;

implenation

Uses
Zentralverwaltung;

Procedure
.
.
.

end.

und jetzt die Zentrale Uses Verwaltung


Delphi-Quellcode:
Unit Zentralverwaltungn;

interface

Uses
Zahlen, Menu, Help, Intro;

implenation


end.

Aber das geht leider Nicht und die Units zusqammenzulegn find ich auch nicht gut. Also muss ich entweder in den Proceduren die Varriablen immer eintippen oder ich finde eine Lösund für das Problem

Habt ihr vll eine???


Danke im Vorraus

Axxus

Sunlight7 25. Apr 2007 22:35

Re: Zirkuläre Unit
 
Abend!

Ich verstehe Dein Problem nicht, ich selbst mach mir auch öfters eine Unit die mehrere miteinander verbindet.
Was heißt "Aber das geht leider Nicht"?
So ne Fehlermeldung kenne ich von Delphi net ;)
Vielleicht hilfts was, wenn Du Delphi-Referenz durchsuchenimplementation richtig schreibst :gruebel:

Axxus 26. Apr 2007 14:07

Re: Zirkuläre Unit
 
Ok hab jetzt meine Lösung

Mein Problem war, das in der Hauptunit de Varriablen drinwaren und die brauchten die anderen units und meine Hauptunit brauchte die anderen. Ich hab jetzt einfach die Varriablen in ne unit abgepackt auf die alle anderen units zugreiifen können

axxus

aLiKe 23. Mai 2007 14:38

Re: Zirkuläre Unit
 
So, und noch eine Auffrischung, diesmal von mir.

Selbiges Problem wie oben, eine "Zentraleverwaltungs"-Unit klappt aber bei mir auch nicht,
denn in einer der Units brauch ich ne Klasse aus ner anderen(als Parameter einer procedure).

Um das Beispiel von Axxus aufzugreifen:

seine Unit Help hätte irgendwo eine procedure in einer Klasse in etwa so:

Delphi-Quellcode:
procedure zahlenHilfe(dings: (Klasse aus Unit Zahlen));
Da die procedure zahlenHilfe nu im interface teil ist(teil einer Klasse),
und ich im implementations Teil auf Unit zahlen verweise, gitbs da oben ein
Problem.

Bisher mach ichs, indem ich einfach nen TOBject als parameter haben will,
und in der implementation entsprechend caste. Aber das find ich unschick.
Fällt jemandem noch was anderes ein?

Mfg
aLiKe


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:46 Uhr.

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