Circular unit reference

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
FrankS
Beiträge: 10
Registriert: Mi 26. Jan 2022, 18:55

Circular unit reference

Beitrag von FrankS »

Hallo allerseits,
ich versuche ein C# Programm auf FPC umzusetzen und bin dabei auf folgendes Problem gestossen.

Code: Alles auswählen

TBaseThing = class(TObject)
end;

TThing = class(TBaseThing) 
private
FContainer: TThingHolder;
end;

TThingHolder = class(TThing)
end;
Alle Klassen stehen in separaten Dateien.

Damit gibt es jetzt natürlich eine Circular unit reference zwischen der TThing und TThingHolder Unit.
Kann dieses Problem irgendwie gelöst werden?

Ist wahrscheinlich irrelevant mein System:
Windows 10
Lazarus 2.2.6
FPC 3.2.2

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1732
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: Circular unit reference

Beitrag von corpsman »

Nicht schön aber löst dein Problem

binde die circuläre unit unterhalb von implementation ein und schreibe oberhalb anstatt

TThing = class(TBaseThing)
private
FContainer: TThingHolder;
end;
TThing = class(TBaseThing)
private
FContainer: TObject;
end;
Dann caste in deinem Code alles auf TThingHolder
--
Just try it

Benutzeravatar
Zvoni
Beiträge: 504
Registriert: Fr 5. Jul 2024, 08:26
OS, Lazarus, FPC: Windoof 10 Pro (Laz/FPC fixes)
CPU-Target: 64Bit
Wohnort: BW

Re: Circular unit reference

Beitrag von Zvoni »

Denke ich jetzt zu sehr um die Ecke?

Code: Alles auswählen

program Project1;
{$mode objfpc}{$H+}
Uses Sysutils, Classes;

Type
    TBaseThing = class(TObject)
    end;

    TThingHolder = class;  //Forward Declaration

    TThing = class(TBaseThing)
    private
    FContainer: TThingHolder;
    end;

    TThingHolder = class(TThing)
    end;

begin
  Readln;
end.
Und Lazarus 2.2.6?? Ernsthaft?
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.

Antworten