Klasa TWorld instancira klasu TCharacter (Player: TCharacter)
Klasa TCharacter koristi klasu TWorld (TWorld.IsAvailable)
Problem je, pogadjate, circular unit reference...
E sad...
Resenje bi bilo koriscenje forward declarationa za klase i naravno obe klase da su u istom unitu.
Medjutim, u tom unitu onda ce biti dosta klasa, tipova podataka, itd. sto cini unit skroz zapetljanim, iako pojedinacne klase su prilicno jednostavne. Razmisljam se da koristim preprocesorsku direktivu {Include filename}. Naime, {Include} funkcionise tako sto pre kompajliranja fajla svi include fajlovi kopiraju svoj sadrzaj u glavni fajl (onaj koji sadrzi direktivu include) i to na mestu gde je postavljena direktiva, pa se tek onda glavni fajl kompajlira, ali onda moram da razdvojim interface i implementation za klase u razlicite fajlove (C sistem), a to mi se bas i ne radi iz razloga sto kod treba da bude svima citljiv, razumljiv i u duhu Delphi OOP. Ima li neko neku bolju ideju?
Sobzirom da mozda i nisam bas verziran u klasnom sistemu Delphia pitam se ima li bolji nacin od include-a. Prvenstveno mislim na cinjenicu da je klasa TWorld parent za klasu TCharacter i bice parent i za sve ostale klase koje ce svakako morati da koriste klasu TWorld...
Pada mi na pamet (mozda malo debilno) resenje u obliku praklase za TWorld koja ce sadrzati samo metod IsAvailable i koja ce biti u svom unitu, zatim TCharacter ce koristiti tu praklasu a ne sam TWorld...
type
TWorldAncestor = class
public
procedure IsAvailable
...
uses
WorldAncestor;
type
TWorld = class(TWorldAncestor)
...
uses
WorldAncestor;
constructor TCharacter.Create(AWorld: TWorldAncestor)
begin
FWorld := AWorld;
//onda valjda moze [if FWorld.IsAvailable], ako se za AWorld prosledi TWorld
Include, ancestor ili nesto trece?