Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Zirkuläre Uni-Referenz einer Unit auf sich selbst? (https://www.delphipraxis.net/136243-zirkulaere-uni-referenz-einer-unit-auf-sich-selbst.html)

Oracle 26. Jun 2009 08:11


Zirkuläre Uni-Referenz einer Unit auf sich selbst?
 
Meine Delphi 2007 spuckt mir zur Zeit einen Fehler aus den ich nicht verstehen.

Ich bekomme folgenden Fehler:

[DCC Fehler] Unitx.pas (10): F2047 Zirkuläre Unit-Referenz auf Unitx.pas

Also eine Unit referenziert sich selbst zirkulär?? Wie kann das sein, ich dachte bisher immer für eine zirkuläre Referenz müssten mindestens zwei Units beteiligt sein.

Vielen Dank euch schonmal im Vorraus :)

mirage228 26. Jun 2009 08:35

Re: Zirkuläre Uni-Referenz einer Unit auf sich selbst?
 
Hast Du die Unit evtl. innerhalb der der Unit selbst referenziert? Gibt es vielleicht eine Unit mit selbem Namen im Suchpfad? Was passiert, wenn Du alle DCU Dateien löscht und das Projekt neu erzeugst?

Viele Grüße

Oracle 26. Jun 2009 09:51

Re: Zirkuläre Uni-Referenz einer Unit auf sich selbst?
 
Ich konnte es inzwischen lösen, allerdings ist mir trotzdem nicht ganz klar wo der Fehler lag.
Die Unit habe ich nicht innnerhalb von sich selbst referenziert.

Der Compiler zeigte mir in der Uses Liste allerdings immer eine Unit mit Rot an. Anscheinend ist das die zweite Unit im Bunde dieser zirkuläre Referenz. Nur komisch dass ich in dieser Rot markierten Unit die Unit aus der Fehlermeldung gar nicht referenziert habe. Kann eine zirkuläre Referenz auch einen größen Zirkel als nur 2 Units haben?

jaenicke 26. Jun 2009 09:54

Re: Zirkuläre Uni-Referenz einer Unit auf sich selbst?
 
Zitat:

Zitat von Oracle
Kann eine zirkuläre Referenz auch einen größen Zirkel als nur 2 Units haben?

Natürlich. Die Units, die oben unter Interface stehen, werden der Reihe nach vom Compiler abgearbeitet. Und wenn der dann wieder zur selben Unit zurückkommt, dann würde das wieder von vorne losgehen (zirkulär eben).

In dem Fall gehört dann eine der Units unter implementation.

Oracle 26. Jun 2009 10:48

Re: Zirkuläre Uni-Referenz einer Unit auf sich selbst?
 
In meinem Fall wurde die bemängelte Unit2 ja gar nicht in der Unit1 referenziert.
Das hatte mich so sehr gewundert. Als würde der Kreis hier nicht nur aus zwei Units bestehen

jaenicke 26. Jun 2009 10:53

Re: Zirkuläre Uni-Referenz einer Unit auf sich selbst?
 
Ja, z.B.:
Code:
Unit1:
uses Unit2;

Unit2:
uses Unit3;

Unit3:
uses Unit1;
Was passiert ist, dass der Compiler den Interfaceteil von Unit1 abarbeitet, dabei die Referenz auf Unit2 findet, also erst den dort abarbeitet, dort die Referenz auf Unit3 finden, ...
So, jetzt müsste erst der komplette Interfaceteil von Unit1 abgearbeitet werden um den von Unit3 abzuarbeiten. Und damit schließt sich der Kreis.

Da Delphi einen Single-Pass-Compiler hat, lässt sich das nicht anders lösen als eine der Units nach implementation zu verschieben. Dieser Teil der Unit wird erst danach abgearbeitet.

Oracle 26. Jun 2009 11:28

Re: Zirkuläre Uni-Referenz einer Unit auf sich selbst?
 
Aha, also gehts tatsache auch über mehr als 2 Units. Super dann weiss ich bescheid. Die entsprechende Unit zu finden kann in dem Fall allerdings mühsehlig sein.
Aber danke :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:54 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