![]() |
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 |
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 ;) |
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, ... |
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. |
Re: Hilfe!!
danke erst einmal für die hilfe, aber meinst du mit OH???
Gruß Zita |
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. |
Re: Zirkuläre Unit
Zitat:
Das passiert, wenn sich zwei, oder mehrere Units gegenseitig in der globalen (oberen) Uses Klausel referenzieren. Unit1:
Delphi-Quellcode:
Unit2:
unit Unit1;
interface uses 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. |
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
Dieses Thema wurde von "SirThornberry" von "Programmieren allgemein" nach "Object-Pascal / Delphi-Language" verschoben.
|
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! |
Re: Zirkuläre Unit
Zudem kann man die Typdeklaration in eine Dritte Unit auslagern, die dann beide nutzen.
|
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 |
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 ![]() |
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 |
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:
Da die procedure zahlenHilfe nu im interface teil ist(teil einer Klasse),
procedure zahlenHilfe(dings: (Klasse aus Unit Zahlen));
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