Forum: Algorithmen, Datenstrukturen und Klassendesign
FreePascal
by Olli73,
30. Aug 2014
Anstatt "und diese werden nicht aufgerufen" meinte ich eigentlich "es werden überhaupt keine Konstruktoren aufgerufen" und deshalb hat er auch die Zugriffsverletzung bekommen; ein "create" hat er erst später ergänzt, wie man am "edit" sieht. Außerdem muss er ja irgendwie/irgendwo die (privaten) Felder füllen für den gegenseitigen Zugriff.
Hatte ich ja in meinem Edit zu #13 geschrieben -...
Forum: Algorithmen, Datenstrukturen und Klassendesign
FreePascal
by Olli73,
30. Aug 2014
constructor TMainClass.Create;
begin
UsefulClass := TUseFulClass.Create;
UsefulClass.FMainClass := self; // aber das hier Würde zumindest funktionieren, auch wenn es etwas unschön ist, wie du an den anderen Kommentaren siehst
end;
Edit: Etwas besser wäre es, wenn du TUseFullClass einen entsprechenden Constructor mit Parameter "Owner" (bzw. "MainClass") hinzufügst und denn so...
Forum: Algorithmen, Datenstrukturen und Klassendesign
FreePascal
by Olli73,
30. Aug 2014
Wenn das ganze auch noch in Threads ablaufen soll, darfst du sowieso nicht einfach aus dem Thread heraus auf MainClass zugreifen. Dann musst du das ganze mittels Synchronize und/oder CriticalSections absichern...
Gruß,
Olli
Forum: Algorithmen, Datenstrukturen und Klassendesign
FreePascal
by Olli73,
30. Aug 2014
Ohne genau zu wissen, was du vorhast, kann dir keiner Tipps geben, wie du das sauber aufbauen kannst.
Aber grundsätzlich:
Du musst beide Objekte erstellen (create) und die Werte für FMainClass und UseFullClass entsprechend zuweisen (die müssen auf das jeweils andere Objekt, das du erstellst, zeigen).
Gruß,
Olli
Forum: Algorithmen, Datenstrukturen und Klassendesign
FreePascal
by Olli73,
30. Aug 2014
Hast du den Code gekürzt oder sieht der wirklich so aus?
Denn darin gibt es keine Konstruktoren und diese werden auch nicht aufgerufen (um die Instanzen/Objekte zu erstellen).
Gruß,
Olli
Forum: Algorithmen, Datenstrukturen und Klassendesign
FreePascal
by Olli73,
30. Aug 2014
Hilft dir das hier weiter?
TMainClass = class;
TUseFullClass = class
private
FMainClass: TMainClass;
public