Widoczność deklaracji klas a kolejność

0

Cześć,
mam unit a w nim:

unit Model;

interface

uses
  Variants, SysUtils, Classes, StrUtils;

type

  TKierowca = class
     Pojazd: TPojazd;
  end;

  TPojazd= class
     Kierowca: TKierowca;
  end;

(...)

Jak widać klasy odnoszą się do siebie wzajemnie. Pomijając logiczność takiego modelu, jak zrobić tak żeby ten kod sie kompilował.
Bo jak na razie w Klasie TKierowca nie widzi pola TPojazd, gdyż jest on zadeklarowany NIŻEJ. jak zamienie miejscami to jest podobny problem.
Czyli kolejność klas ma znaczenie - jak to obejść. Potrzebuje aby obie klasy widziały siebie...

2
unit Model;
 
interface
 
uses
  Variants, SysUtils, Classes, StrUtils;
 
type
  TPojazd = class; //+

  TKierowca = class
     Pojazd: TPojazd;
  end;
 
  TPojazd= class
     Kierowca: TKierowca;
  end;
 
(...)
 
0

@123sss - to się nazywa forwardowanie i wykonuje się to tak, jak pokazał @marogo;

Trzeba też wspomnieć o tym, że w starszych wersjach Delphi (w nowych nie wiem - nie używam) nie można było rozdzielić wstępnej i właściwej deklaracji klasy na dwa bloki Type - musiały być w jednym; Pod Lazarusem istnieje możliwość rozłożenia tych dwóch deklaracji na kilka bloków:

type
  TPojazd = class;

type
  TKierowca = class
     Pojazd: TPojazd;
  end;

type
  TPojazd= class
     Kierowca: TKierowca;
  end;

Taki zapis będzie jak najbardziej poprawny.

0

dzięki Panowie. Ja w sumie wiedziałem to ale wyleciało mi z głowy. Dawno nie pisałem w delphi.

1 użytkowników online, w tym zalogowanych: 0, gości: 1