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: 7026
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: 2847
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?
0118999881999119725-3

Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

marcov
Beiträge: 1104
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