Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Überkreuzender Bezug zweier Units auf main
Marco D. - Di 23.01.07 20:01
Titel: Überkreuzender Bezug zweier Units auf main
Ich habe in main einen Typ definiert:
Delphi-Quelltext
1:
| TVisibility = (viPrivate, viPublic, viProtected); |
Dieser wird in der Unit ObjectMethod benötigt.
Darum steht main in der uses-Liste von ObjectMethod:
Delphi-Quelltext
1:
| uses Parameterlist,main,Objectclass; |
Da ich aber in main mit der Klasse aus ObjectMethod arbeiten will, ist ObjectMethod in der uses-Liste von main eingetragen:
Delphi-Quelltext
1: 2: 3:
| uses ... ObjectMethod ... |
Nun meint Delphi aber folgendes:
Error hat folgendes geschrieben: |
[Fataler Fehler] main.pas(7): Überkreuzender Bezug zweier Units auf 'main' |
Was kann ich dagegen tun?
Jann1k - Di 23.01.07 20:06
Definier die Klasse in tVisibility im zweiten Formular, wenn das Konzeptmäßig geht.
Marco D. - Di 23.01.07 20:09
Jann1k hat folgendes geschrieben: |
Definier die Klasse in tVisibility im zweiten Formular, wenn das Konzeptmäßig geht. |
Ok, also:
- TVisibility ist ein Typ -> aber das ist auch egal ;)
- es brauchen noch mehr Units TVisibility, deswegen wollte ich es an
einer zentralen Stelle haben.
- ist es ein Problem, wenn ich TVisibility in mehreren Units gleich definiere?
Jann1k - Di 23.01.07 20:14
Zitat: |
Ok, also:
- TVisibility ist ein Typ -> aber das ist auch egal
- es brauchen noch mehr Units TVisibility, deswegen wollte ich es an einer zentralen Stelle haben.
- ist es ein Problem, wenn ich TVisibility in mehreren Units gleich definiere?
|
Ganz ehrlich, ich hab keine Ahnung was der Unterschied zwischen Typ und Klasse ist, werd ich mich wenn ich später wieder da bin mal informieren.
Ob es ein Problem darstellt dieselbe Klasse in mehreren Units gleich zu definieren, kann ich dir nicht sicher sagen, so wie ich Delphi kenne, wird es ein Problem damit haben.
Spricht etwas dagegen eine eigene Unit für TVisibility zu erstellen?
Marco D. - Di 23.01.07 20:17
Jann1k hat folgendes geschrieben: |
Ganz ehrlich, ich hab keine Ahnung was der Unterschied zwischen Typ und Klasse ist, werd ich mich wenn ich später wieder da bin mal informieren.
|
Ja mach das. ;)
Jann1k hat folgendes geschrieben: |
Ob es ein Problem darstellt dieselbe Klasse in mehreren Units gleich zu definieren, kann ich dir nicht sicher sagen, so wie ich Delphi kenne, wird es ein Problem damit haben.
|
Es muss aber eine einfachere Lösung geben!
Jann1k hat folgendes geschrieben: |
Spricht etwas dagegen eine eigene Unit für TVisibility zu erstellen? |
Ja tut es: Warum soll ich für eine Typdeklaration eine eigene Unit erstellen? Das ist imho überflüssig!
Christian S. - Di 23.01.07 20:48
Hallo!
Brauchst Du in einer der Units die jeweils andere nur im implementation- und nicht schon im interface-Teil? Dann kannst Du die uses-Klauses dorthin verlagern, das sollte den überkreuzenden Bezug auflösen.
Grüße
Christian
Marco D. - Di 23.01.07 20:56
Christian S. hat folgendes geschrieben: |
Hallo!
Brauchst Du in einer der Units die jeweils andere nur im implementation- und nicht schon im interface-Teil? Dann kannst Du die uses-Klauses dorthin verlagern, das sollte den überkreuzenden Bezug auflösen.
Grüße
Christian |
Habe jetzt auf Hinweis BenBe's doch eine zusätzlich Unit genommen. ;)
Was ist denn der Unterschied zwischen den beiden uses-Listen?
Christian S. - Di 23.01.07 21:16
Lies Dir in der Delphi-Sprachreferenz (in der Hilfe enthalten) einfach mal den entsprechenden Abschnitt unterhalb von "Programme und Units" durch. :-)
Marco D. - So 28.01.07 19:27
Habe wieder das Problem.
Ich brauche aber beide Units jeweils im Interface der anderen, ich kann sie nicht unter implementation schieben!
Was tun?
Da muss es doch eine Lösung für geben!
Kroko - So 28.01.07 19:40
(a) mache eine Unit daraus
(b) lagere den Teil, den du benötigst in eine 3.Unit aus
(c) ???
Marco D. - So 28.01.07 19:46
Kroko hat folgendes geschrieben: |
(a) mache eine Unit daraus
(b) lagere den Teil, den du benötigst in eine 3.Unit aus
(c) ??? |
Habe jetzt eine draus gemacht.
Nächstes Problem:
Klasse B ist sozusagen unter Klasse A deklariert.
Klasse A soll eine Instanz von Klasse B enthalten Diese ist aber erst unten deklariert -> Undefinierter Bezeichner!
Man könnte die ja einfach vertauschen!
Aber: Klasse B soll auch eine Instanz von Klasse A enthalten. Dann tritt der gleiche Fehler auf, nur umgekehrt.
BenBe meinte was von Forward-Deklaration, aber das geht lauf DOH nur bei Methoden. :roll: Was tun?
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!