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
beljo 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.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!