Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Zirkuläre Referenz von zwei Klassen vermeiden (https://www.delphipraxis.net/95187-zirkulaere-referenz-von-zwei-klassen-vermeiden.html)

Chaosente 2. Jul 2007 21:57


Zirkuläre Referenz von zwei Klassen vermeiden
 
Also cih hab zwei klassen, und jede braucht die andere für sich selbst:

Klasse 1:
Delphi-Quellcode:
type
  TKKPlayer = class
  private
  FName: string;
  FColor: TColor;
  FID: integer;
  FScore: integer;
  FHandleList: array of TIDShape;
  FHeartBeat: TTimer;
  FAI: boolean;
  procedure OnHeartBeat(Sender: TObject);
  public
  constructor Create(name: string; Color: TColor; ID: integer; AI: boolean);
  property PlayerName: string read FName write FName;
  property PlayerColor: TColor read FColor write FColor;
  Property PlayerID: integer read FID write FID;
  property PlayerScore: integer read FScore write FScore;
  property Heartbeat: TTimer read FHeartbeat write FHeartbeat;
  property AI: boolean read FAI write FAI;
  procedure AddToHandle(a:TIDShape);
  end;
Klasse 2:
Delphi-Quellcode:
type
  TIDShape = class(TShape)
  private
    FYID: integer;
    FXID: integer;
    FOwned: boolean;
    FOwnedBy: TKKPlayer;
    FValue: integer;
  public
    property YID: integer read FYID write FYID;
    property XID: integer read FXID write FXID;
    property Owned: boolean read FOwned write FOwned;
    property OwnedBy: TKKPlayer read FOwnedby write FOwnedBy;
    property Value: integer read FValue write FValue;
  end;

Ich hab nur leider keine ahnung wie ich es so arangieren kann, dass ich es nciht zirkulär aufbaue... hat jemand ne ahnung wie ich das machen kann?

luka 2. Jul 2007 22:10

Re: Zirkuläre Referenz von zwei Klassen vermeiden
 
Versuch es einmal hiermit:
Delphi-Quellcode:
TIDShape = class;
Den Rest findest Du in der Delphi-Hilfe, da solltest Du unbedingt einmal reinschauen. :wink:

3_of_8 2. Jul 2007 22:10

Re: Zirkuläre Referenz von zwei Klassen vermeiden
 
Liegen die Klassen in der gleichen Unit?

Wenn ja, geht das so:

Delphi-Quellcode:
TClass1 = class;

TClass2 = class
protected
  class1: TClass1;
end;

TClass1 = class
protected
  class2: TClass2;
end;

Chaosente 4. Jul 2007 16:46

Re: Zirkuläre Referenz von zwei Klassen vermeiden
 
Wenn ich einfach
Delphi-Quellcode:
type TIDShape = class;
diesen teil vor meine code setze, dann sagt er

[Fehler] KKObjects.pas(8): E2086 Typ 'TIDShape' ist nicht vollständig definiert

mkinzler 4. Jul 2007 16:55

Re: Zirkuläre Referenz von zwei Klassen vermeiden
 
Zeig mal deine Deklaration

Chaosente 4. Jul 2007 16:57

Re: Zirkuläre Referenz von zwei Klassen vermeiden
 
Hier:
Delphi-Quellcode:
type TIDShape = class;

type
  TKKPlayer = class
  private
  FName: string;
  FColor: TColor;
  FID: integer;
  FScore: integer;
  FHandleList: array of TIDShape;
  FHeartBeat: TTimer;
  FAI: boolean;
  procedure OnHeartBeat(Sender: TObject);
  public
  constructor Create(name: string; Color: TColor; ID: integer; AI: boolean);
  property PlayerName: string read FName write FName;
  property PlayerColor: TColor read FColor write FColor;
  Property PlayerID: integer read FID write FID;
  property PlayerScore: integer read FScore write FScore;
  property Heartbeat: TTimer read FHeartbeat write FHeartbeat;
  property AI: boolean read FAI write FAI;
  procedure AddToHandle(a:TIDShape);
  end;

type
  TIDShape = class(TShape)
  private
    FYID: integer;
    FXID: integer;
    FOwned: boolean;
    FOwnedBy: TKKPlayer;
    FValue: integer;
  public
    property YID: integer read FYID write FYID;
    property XID: integer read FXID write FXID;
    property Owned: boolean read FOwned write FOwned;
    property OwnedBy: TKKPlayer read FOwnedby write FOwnedBy;
    property Value: integer read FValue write FValue;
  end;

mkinzler 4. Jul 2007 16:59

Re: Zirkuläre Referenz von zwei Klassen vermeiden
 
Lass mal die ganzen überflüssigen Types weg:
type
Delphi-Quellcode:
  TIDShape = class;

  TKKPlayer = class
 ...
  end;

  TIDShape = class(TShape)
...

Chaosente 4. Jul 2007 16:59

Re: Zirkuläre Referenz von zwei Klassen vermeiden
 
hui warum sind die überflüssig?

geht nciht deklaration erwartet...

mkinzler 4. Jul 2007 17:02

Re: Zirkuläre Referenz von zwei Klassen vermeiden
 
Weil sich das type anders wie typedef in C in Delphi auf den Abschnitt und nicht auf die folgende Deklaration bezieht

DGL-luke 4. Jul 2007 17:02

Re: Zirkuläre Referenz von zwei Klassen vermeiden
 
alle "type"s bis auf das erste bitte ersatzlos streichen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:14 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz