Forwardowanie klas...

0

witam. przeczytalem pare artykulow o forwardowaniu klas, no i zdaje sie ze rozumiem... problem w tym ze to zwyczajnie nie dziala..

type TPlayer = class;

type TClient = class
    constructor Create;
  private
    Socket: TCustomWinSocket;
    Connected: Boolean;
    //Player: TPlayer;
end;

type TPlayer = class(TCreature)
  Client: TClient;
  //
  constructor Create;
  destructor Free;
end;

=> E2086 Type 'TPlayer' is not yet completely defined

uzywam codegear delphi 2007

PS: probowalem juz zapisywac bez 'type' w pierwszej oraz drugiej deklaracji klasy TPlayer, probowalem dodawac to w sekcjach inferface, implementation i nic..

prosze o pomoc! z gory dziekuje.

0

W Delphi klas się nie forwarduje (chyba, że się mylę?), a jedynie funkcje i procedury. Do takich rzeczy używa się interfejsów, jak to opisałem w odpowiedzi na twoje poprzednie pytanie, które trafiło do kosza.

0

dzieki za odpowiedz ;] nie mialem okazji przeczytac tamtej odpowiedzi zanim wylecial temat.

w takim razie to chyba nalezaloby poprawic:

http://4programmers.net/Delphi/Forward

dokladniej w akapicie:

Taką samą praktyke można zastosować w stosunku do klas, spójrz na poniższy przykład:

0

Problem w tym artykule jest taki, że taki sposób deklaracji działa, ale nie jest zwykłym forwardowaniem tylko deklaracją klasy (w odróżnieniu od definicji klasy).

Główna różnica polega na tym, że forwardowanie możesz stosować wszędzie, a deklarować klasę tylko w tym samym bloku co ją definiujesz.

Czy masz gdzieś wcześniej zdefiniowane TCreature? ..bo musi być wcześniej zdefiniowane.

Twój przykład będzie działał w takiej postaci:

type //Wszystko w jednym bloku TYPE

TCreature = class
    a:integer;
  end;

TPlayer = class;

TClient = class
    constructor Create;
  private
    Socket: TCustomWinSocket;
    Connected: Boolean;
    Player: TPlayer;
  end;

TPlayer = class(TCreature)
    Client: TClient;
    //
    constructor Create;
    destructor Free;
  end;
0

da się, co więcej Twój kod działa ok na D7

0

Ale w Delphi 2007 już nie bo od D8 zaczęto rozróżniać forwardowanie i deklarowanie z oddzielą definicją (zupełnie jak w językach C/C++; a cieszyłem się, że Delphi tego nie ma).

0
Szczawik napisał(a)

(...)
Czy masz gdzieś wcześniej zdefiniowane TCreature? ..bo musi być wcześniej zdefiniowane.

zdefiniowane jest w innym unicie ktory jest zaincludowany. okazalo sie ze w jednej sekcji type wszystko dziala poprawnie. wielkie dzieki za pomoc, pozdrawiam!

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