Entwickler-Ecke

Sonstiges (Delphi) - Überkreuzender Bezug zweier Units aufeinander


Marco D. - Mi 19.07.06 14:55
Titel: Überkreuzender Bezug zweier Units aufeinander
Ich habe zwei Units. Einmal die Hauptunit und eine weitere mit einer eigenen Klasse. In der Hauptunit ist ein Record deklariert, der in der zweiten Unit gebraucht wird. Darum füge ich dort ein:

Delphi-Quelltext
1:
2:
3:
4:
5:
unit Blubb;

interface

uses main;

Ok. Wenn ich nun aber in der Hauptunit ein Objekt dieser Klasse erstellen will, muss ich ja dort auch irgendwo unter uses den Namen der zweiten Unit eintragen, damit diese Klasse in der Hauptunit überhaupt bekannt ist. Wenn ich nun in Main schreibe:

Delphi-Quelltext
1:
2:
3:
4:
5:
unit main;

interface

uses ..., Blubb;

dann erscheint immer der Fehler
Zitat:

[Fataler Fehler] main.pas(7): Überkreuzender Bezug zweier Units auf 'main'

Was tun?


mkinzler - Mi 19.07.06 15:03

-Daten in 3. Unit auslagern, welche von beiden Units benutzt wird
-In einer Unit im Interface und in der anderen unter Implementation


beljo - Mi 19.07.06 16:21

sofern Du in der Unit Main keine parameter an unit Blubb übergibst reicht es schon nur in der Unit Main die Unit Blubb anzugeben.
das auslagern in eine dritte Unit entfällt somit


mkinzler - Mi 19.07.06 16:25

user profile iconbeljo hat folgendes geschrieben:
sofern Du in der Unit Main keine parameter an unit Blubb übergibst reicht es schon nur in der Unit Main die Unit Blubb anzugeben.
das auslagern in eine dritte Unit entfällt somit

Er braucht aber Daten aus Main in Blubb.


jaenicke - Mi 19.07.06 17:50

Solange nicht oberhalb von uses etwas aus der anderen Unit (z.B. ein Objekt als Variable) verwendet wird, kann einfach unterhalb von implementation uses xy geschrieben werden und es gibt kein Überkreuzen mehr.

Soll das Objekt der anderen Unit innerhalb einer Struktur benutzt werden, kann dieses als TObject Variable gespeichert werden und bei Benutzung zum eigentlichen Typ gecastet werden.


alias5000 - Mi 19.07.06 17:54

zweimal uses im Interface ist nicht erlaubt.
Maximal kannst du einmal inteface und einmal implementation nehmen.

Wenn sich die Daten nicht in implementation verschieben lassen, würde ich den Weg über die 3.Unit wählen.

Gruß alias5000


Delete - Mi 19.07.06 19:06

Man kann in o. g. Fall den Datentyp, der in UnitMain gebraucht wird auch in UnitSub definieren und somit in beiden verwenden. Damit muss auch nicht überkreuzt werden und die Diskussion, ob im Interface oder Implementation Teil eine Unit eingebunden wird entfällt in diesem Fall.