Autor Beitrag
MathiasH
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 699

WinXP, Win98SE, Debian, Win95
D5 Stand, D6 Prof
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 185



BeitragVerfasst: So 14.07.02 10:53 
Zeig doch mal die Interface Teile der Unit
Alfons-G
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 307

Win XP Prof, Linux, Win 7
D5 Prof, D7 Architect, D2005 Architect, D2007 Architect
BeitragVerfasst: 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:
ausblenden 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:
ausblenden 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.

:idea:

_________________
Alfons Grünewald
aogwaba
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 109



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 160



BeitragVerfasst: So 14.07.02 15:23 
Alfons-G hat folgendes geschrieben:
Nur so kannst Du sie gegenseitig zuweisen:
ausblenden 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
ausblenden Quelltext
1:
2:
type
  TTyp2 = TTyp1;
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 160



BeitragVerfasst: 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 :wink: , 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 699

WinXP, Win98SE, Debian, Win95
D5 Stand, D6 Prof
BeitragVerfasst: Mo 15.07.02 20:27 
Danke für diese heitere Diskussion, es war amüsant zum mitverfolgen 8)

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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 160



BeitragVerfasst: Mo 15.07.02 20:37 
MathiasH hat folgendes geschrieben:
Danke für diese heitere Diskussion, es war amüsant zum mitverfolgen 8)

Ob du dieses Gefühl auch noch hättest, wenn du wüßtest, wie sehr das Thema ein Anfängerthema ist?

MfG Pit.
MathiasH Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 699

WinXP, Win98SE, Debian, Win95
D5 Stand, D6 Prof
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: 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 :-D

Gruß
TINO
MathiasH Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 699

WinXP, Win98SE, Debian, Win95
D5 Stand, D6 Prof
BeitragVerfasst: Mi 17.07.02 17:15 
@Tino :cry: Anfänger der seit 2,5 Jahren programmiert, Danke :cry:

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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 160



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: 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.