Autor |
Beitrag |
MathiasH
Beiträge: 699
WinXP, Win98SE, Debian, Win95
D5 Stand, D6 Prof
|
Verfasst: So 14.07.02 10:05
Ich habe zwei Units(mit uses auf die jeweils andere). Die eine Unit hat ein paar Datentypen, und ich muss auf genau den selben Datentyp in der anderen Unit zugreifen, Delphi behauptet aber dann immer, dass die beiden inkompatibel sind, kann kan das ändern?
MathiasH
_________________ "Viel von sich reden, kann auch ein Mittel sein, sich zu verbergen."
Friedrich Nietzsche
|
|
wwerner
Beiträge: 185
|
Verfasst: So 14.07.02 10:53
Zeig doch mal die Interface Teile der Unit
|
|
Alfons-G
Beiträge: 307
Win XP Prof, Linux, Win 7
D5 Prof, D7 Architect, D2005 Architect, D2007 Architect
|
Verfasst: So 14.07.02 11:05
Datentypen - ich gehe davon aus, dass Du Record-Typen meinst, bei einfachen Typen dürfte es nicht passieren - sind nur dann zueinander kompatibel, wenn der Eine vom Anderen abgeleitet ist. Wenn Du es also so machst: Quelltext 1: 2: 3: 4: 5: 6:
| type TTyp1 = record // Definition end; type TTyp2 = record // Definition wie TTyp1 end; | dann sind die beiden Typen nicht kompatibel, obwohl sie dieselbe Struktur haben. Nur so kannst Du sie gegenseitig zuweisen: Quelltext 1: 2: 3: 4: 5: 6:
| type TTyp1 = record // Definition end; type TTyp2 = record Typ1: TTyp1; end; | Schau dazu mal in der Delphi-Hilfe unter strukturierten typen nach.
_________________ Alfons Grünewald
|
|
aogwaba
Beiträge: 109
|
Verfasst: So 14.07.02 12:20
Mal abgesehen davon, das es nicht möglich ist, das zwei Units sich
gegenseitig in der uses Klausel referenzieren (Verletzung der referentiellen Integrität, keine Mehrfachvererbung möglich), ausser wenn eine im Implementation Teil erscheint, sind die beiden Typen in dem obigen Beispiel nicht zuweisungskompatibel.
typ1:=typ2
geht nicht
typ1:=typ2.typ1;
geht
Warum benutzt du nicht einfach eine dritte Unit in der du die Typen
deklarierst?
cu waba
|
|
Pit
Beiträge: 160
|
Verfasst: So 14.07.02 15:23
Alfons-G hat folgendes geschrieben: | Nur so kannst Du sie gegenseitig zuweisen: Quelltext 1: 2: 3: 4: 5: 6:
| type TTyp1 = record // Definition end; type TTyp2 = record Typ1: TTyp1; end; | |
"Nur so" ist schlicht falsch. Dein Ansatz ist umständlich und unnötig, ein simples Quelltext würde genügen.
Aber auch das ist gar nicht nötig, da dazu TTyp1 ohnehin bekannt sein muß, also auch gleich mit TTyp1 gearbeitet werden kann.
Pit.
|
|
Pit
Beiträge: 160
|
Verfasst: So 14.07.02 15:30
aogwaba hat folgendes geschrieben: | Mal abgesehen davon, das es nicht möglich ist, das zwei Units sich gegenseitig in der uses Klausel referenzieren |
Warum sollte das nicht möglich sein? Es dürfen nur keine zirkulären Bezüge entstehen, d.h. bei einer der beiden Units kann die andere Unit nur im implementation-Teil bekannt sein.
Zitat: | (Verletzung der referentiellen Integrität, keine Mehrfachvererbung möglich), |
Klingt gut, hat aber beides mit dem Problem nicht das geringste zutun.
Zitat: | ausser wenn eine im Implementation Teil erscheint, sind die beiden Typen in dem obigen Beispiel nicht zuweisungskompatibel. |
Sind sie auch dann nicht wirklich , wir du ja selbst zeigst. Und wie ich schon schrieb, dann ist das ganze gar nicht mehr nötig.
Zitat: | Warum benutzt du nicht einfach eine dritte Unit in der du die Typen
deklarierst? |
Wozu? Es reicht doch aus, den gemeinsamen Typ in einer der beiden Units zu deklarieren. Er kann dann in der anderen benutzt werden. In vielen Fällen muß die Unit, in der die Deklaration steht, von der anderen Unit überhaupt nichts wissen, so das ein Teil der angesprochenen Probleme rein theoretisch bleibt.
Eine dritte Unit ist nur dann nötig, wenn jede der beiden Units Deklarationn aus der anderen Unit benötigt, dann müssen diese gemeinsamen Deklarationen ausgelagert werden. Und aus Übersichtsgründen macht es natürlich Sinn, eine dritte Unit zu benutzen, auch wenn es nicht unbedingt nötig ist.
MfG Pit.
|
|
MathiasH
Beiträge: 699
WinXP, Win98SE, Debian, Win95
D5 Stand, D6 Prof
|
Verfasst: Mo 15.07.02 20:27
Danke für diese heitere Diskussion, es war amüsant zum mitverfolgen
Ich benötige für mein Problem die Möglichkeit mit der 3.Unit in de3r Haupt-Uses-Klausel, da beide Units möglichst einfach(kurzer QT) aufeinander zugreifen müssen.
MathiasH
_________________ "Viel von sich reden, kann auch ein Mittel sein, sich zu verbergen."
Friedrich Nietzsche
|
|
Pit
Beiträge: 160
|
Verfasst: Mo 15.07.02 20:37
MathiasH hat folgendes geschrieben: | Danke für diese heitere Diskussion, es war amüsant zum mitverfolgen |
Ob du dieses Gefühl auch noch hättest, wenn du wüßtest, wie sehr das Thema ein Anfängerthema ist?
MfG Pit.
|
|
MathiasH
Beiträge: 699
WinXP, Win98SE, Debian, Win95
D5 Stand, D6 Prof
|
Verfasst: Di 16.07.02 19:54
Das ist mir sehr wohl bewusst, aber ich hab's nirgends gefunden, und auf die (eigentlich simple) Idee mit der 3.Unit bin ich irgendwie nicht gekommen.
_________________ "Viel von sich reden, kann auch ein Mittel sein, sich zu verbergen."
Friedrich Nietzsche
|
|
Tino
Beiträge: 9839
Erhaltene Danke: 45
Windows 8.1
Delphi XE4
|
Verfasst: Di 16.07.02 21:40
MathiasH hat folgendes geschrieben: | die Idee mit der 3.Unit bin ich irgendwie nicht gekommen. |
Das ist ja kein Problem. Dafür gibt es ja AUQ.de! Und 99% der User ist es so wie so egal ob Du nun Anfänger bist oder nicht
Gruß
TINO
|
|
MathiasH
Beiträge: 699
WinXP, Win98SE, Debian, Win95
D5 Stand, D6 Prof
|
Verfasst: Mi 17.07.02 17:15
@Tino Anfänger der seit 2,5 Jahren programmiert, Danke
Kein Problem, die frage war auch simpel, aber ich bin halt nich draufgekommen
PS.: die Lösung wird schon verwendet(Formelzeichner)
Mathias
_________________ "Viel von sich reden, kann auch ein Mittel sein, sich zu verbergen."
Friedrich Nietzsche
|
|
Tino
Beiträge: 9839
Erhaltene Danke: 45
Windows 8.1
Delphi XE4
|
Verfasst: Mi 17.07.02 17:26
Hi,
ich nenne Dich bestimmte keinen Anfänger. Mein Posting habe ich eigentlich nur wegen Pits Kommentar geschrieben:
Pit hat folgendes geschrieben: | Ob du dieses Gefühl auch noch hättest, wenn du wüßtest, wie sehr das Thema ein Anfängerthema ist? |
Ich finde das dieser Kommentar etwas unpassend ist und habe deshalb etwas geschrieben!
Also, sorry wenn das anders verstanden wurde!
Gruß
TINO
|
|
Pit
Beiträge: 160
|
Verfasst: Mi 17.07.02 17:43
Tino hat folgendes geschrieben: | Mein Posting habe ich eigentlich nur wegen Pits Kommentar geschrieben: |
Wenn du ein Problem mit meinem Kommentar hast, dann kläre das mit mir und am besten per PN.
Zitat: | Ich finde das dieser Kommentar etwas unpassend ist und habe deshalb etwas geschrieben! |
Ich finde diesen Kommentar ganz und gar nicht unpassend, sondern sehr zurückhaltend. Und ich denke, daß Mathias den Wink im Gegensatz zu dir trotzdem verstanden hat.
Im übrigen habe ich, im Gegensatz zu dir, nicht versucht, Mathias als Anfänger abzustempeln. Denk mal darüber nach.
Mehr möchte ich dazu nicht sagen müssen, weil ich sonst einigen Leuten hier auf die Füße treten müßte.
MfG Pit.
|
|
Tino
Beiträge: 9839
Erhaltene Danke: 45
Windows 8.1
Delphi XE4
|
Verfasst: Mi 17.07.02 18:48
Pit hat folgendes geschrieben: | Im übrigen habe ich, im Gegensatz zu dir, nicht versucht, Mathias als Anfänger abzustempeln. |
Wenn Du meinen Beitrag verstanden hättest dann wüsstest Du das ich das nicht so wie du es hier schildest gemeint habe!
Pit hat folgendes geschrieben: | Wenn du ein Problem mit meinem Kommentar hast, dann kläre das mit mir und am besten per PN. |
Gut das hätte ich tun können. Aber da Du ja auch solche Kommentare wie "Ob du dieses Gefühl auch noch hättest, wenn du wüßtest, wie sehr das Thema ein Anfängerthema ist?" öffentlich postest habe ich es auch öffentlich gemacht!
Aber Du hast recht: wir sollten es per PN regeln da es noch mehr Punkte zu klären gibt!
Gruß
TINO
|
|
Dieses Thema ist gesperrt, Du kannst keine Beiträge editieren oder beantworten.
Das Thema wurde von einem Team-Mitglied geschlossen. Wenn du mit der Schließung des Themas nicht einverstanden bist, kontaktiere bitte das Team.
|
|