Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Überkreuzende Benutzung 2r Klassen /Bidirektional Verbindung
Flamefire - Fr 26.09.08 15:34
Titel: Überkreuzende Benutzung 2r Klassen /Bidirektional Verbindung
Hallo,
ich habe folgendes Problem:
Erste Unit:
Delphi-Quelltext
1: 2: 3: 4: 5:
| Unit unKlasse1; type TKlasse1=class private FKlasse2:TKlasse2; ... |
Zweite Unit:
Delphi-Quelltext
1: 2: 3: 4: 5:
| Unit unKlasse2; type TKlasse2=class private FKlasse1:TKlasse1; ... |
Ich will also in jeder Klasse jeweils eine Referenz auf die andere Klasse Benutzen.
(Es handelt sich in meinem Fall um einen Thread, der Eigenschaften der Hauptklasse lesen soll. Diese Hauptklasse soll wiederum den Thread als referenz drin haben, um ihn z.B. Abzubrechen)
Wie kann ich das machen?
wenn ich die units gegenseitig in die Uses aufnehme kommt die Meldung "Überkreuzender Bezug 2er Units" logischerweise...
aber ich brauch ja die Unit in den uses weil er die TYpendeklaration sonst nicht kennt.
Gibts ne andere Möglichkeit, als die Typen alle in einer Unit zu deklarieren?
Boldar - Fr 26.09.08 15:54
versuch mal die unit hinter implementation zu machen und eine Forward-deklaration zu machen!
Flamefire - Fr 26.09.08 16:02
klappt leider nur bei prozeduren und funktionen
Edit: es geht nichtmal wenn ich sie untereinander schreibe. (Also erst Klasse1 und in er selben unit im gleichem type-Abschnitt Klasse2 definiere)
Es kommt dann "Unbekannter Bezeichner TKlasse2" und "Bezeichner redefiniert TKlasse2"
Delete - Fr 26.09.08 16:14
Ich fürchte, Du wirst beide Klassen in dieselbe Unit packen müssen und auch dann musst Du eine der beiden forward deklarieren, sonst geht es nicht.
footstep78 - Fr 26.09.08 16:36
Innerhalb einer Unit geht es schon, für eine Klasse braucht man aber eine Vorwärtsdeklaration. Die sieht bei Klassen aber anders aus, als bei Prozeduren und Funktionen (also nicht mit dem Schlüsselwort forward).
Beispiel:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| type TKlasse2=class;
TKlasse1=class private FKlasse2:TKlasse2; end;
TKlasse2=class private FKlasse1:TKlasse1; end; |
Delete - Fr 26.09.08 16:40
Genauso hatte ich das gemeint ;)
Flamefire - Sa 27.09.08 18:36
Danke das klappt =)
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!