Kreuzreferenz zwischen Objekten

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Komoluna
Beiträge: 565
Registriert: So 26. Aug 2012, 09:03
OS, Lazarus, FPC: Windows(10), Linux(Arch)
CPU-Target: 64Bit

Kreuzreferenz zwischen Objekten

Beitrag von Komoluna »

Liebes Forum,

ich habe 2 Units, die 2 verschiedene Klassen implementieren, die beide eine Referenz des anderen Objekts beinhalten sollen.

Also so:
Unit 1:

Code: Alles auswählen

unit a;
{$mode objfpc}{$H+}  
interface
uses ...;
type
TKlasseA = class
Referenz: TKlasseB;
end;
interface
[...]
end.
Unit 2:

Code: Alles auswählen

unit b;
{$mode objfpc}{$H+}  
interface
uses ...;
type
TKlasseB = class
Referenz: TKlasseA;
end;
interface
[...]
end.
leider kann man nicht einfach die Units in uses Eintragen, da der compiler über eine "circular reference between a and b" beschwert.

Wie kann man das Problem am besten lösen?


MFG

Komoluna
Programmer: A device to convert coffee into software.

Rekursion: siehe Rekursion.

Mathias
Beiträge: 6938
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Kreuzreferenz zwischen Objekten

Beitrag von Mathias »

Und wen du die Unit im interface Teil deklarierst, geht das auch nicht ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Komoluna
Beiträge: 565
Registriert: So 26. Aug 2012, 09:03
OS, Lazarus, FPC: Windows(10), Linux(Arch)
CPU-Target: 64Bit

Re: Kreuzreferenz zwischen Objekten

Beitrag von Komoluna »

Meinst du mit Unit Deklaration

Code: Alles auswählen

unit a;
? Das muss doch (oder program) immer ganz oben stehen oder?

MFG

Komoluna
Programmer: A device to convert coffee into software.

Rekursion: siehe Rekursion.

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2822
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Kreuzreferenz zwischen Objekten

Beitrag von m.fuchs »

Komoluna hat geschrieben:Wie kann man das Problem am besten lösen?
Das kommt darauf an, was das eigentliche Ziel ist. Je nachdem rät man zu unterschiedlichen Lösungen. Worum geht es denn genau?
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

marcov
Beiträge: 1102
Registriert: Di 5. Aug 2008, 09:37
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
CPU-Target: 32/64,PPC(+64), ARM
Wohnort: Eindhoven (Niederlande)

Re: Kreuzreferenz zwischen Objekten

Beitrag von marcov »

Es kann prinzipiell nicht, hat mit Unit System zu tun. (das Modell wie Pascal mehrere Quellen automatisch verwaltet)

Mögliche Lösungen:

- Alles in einen Unit werfen. Dann kann mit xx =class; eine Klasse voraus deklarieren.
- Vererbung, eine basis Klasse für einer der Klassen deklarieren in ein drittes Unit, und die in beide Units importieren.
- Einfachweg ein Referenz TObject oder so machen, und im Implementation typecasten nach richter typ

Antworten