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 Forward Deklaration von Klassen (https://www.delphipraxis.net/101703-forward-deklaration-von-klassen.html)

MatthiasR 17. Okt 2007 15:25


Forward Deklaration von Klassen
 
Hallo allerseits,

ich habe folgendes Problem unter Delphi 7: ich möchte innerhalb einer Unit eine ganze Latte von Klassen definieren, die jeweils Objekte von andren Klassen als property haben. Um das ganze übersichtlicher zu gestalten, möchte ich Forward Deklarationen der Klassen einbauen, damit diese auch ganz oben bereits bekannt sind. Aber egal, was ich mache, Delphi beschwert sich immer bei mir, dass ich die Klassen redefinieren würde, mache ich irgendwas falsch? Hier ein Beispiel wie ich vorgehe. Es wird von Delphi so leider nicht akzeptiert (besagte Fehlermeldung) und ich weiß nicht warum:
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TKlasse2 = class(TObject);
  TKlasse3 = class(TObject);

  TKlasse1 = class(TObject)
  private
    FObjekt2: TKlasse2;
  public
    property Objekt2: TKlasse2 read FObjekt2 write FObjekt2;
  end;

  TKlasse2 = class(TObject)
  private
    FObjekt3: TKlasse3;
  public
    property Objekt3: TKlasse3 read FObjekt3 write FObjekt3;
  end;

  TKlasse3 = class(TObject)
  private
    FTest1: String;
    FTest3: String;
    FTest2: String;
  public
    property Test1: String read FTest1 write FTest1;
    property Test2: String read FTest2 write FTest2;
    property Test3: String read FTest3 write FTest3;
  end;

implementation

end.

Muetze1 17. Okt 2007 15:32

Re: Forward Deklaration von Klassen
 
Lass "(TObject)" weg. Eine Forward Deklaration lautet einfach nur
Delphi-Quellcode:
type
  TDeineKlasse = class;

MatthiasR 17. Okt 2007 15:37

Re: Forward Deklaration von Klassen
 
Auch schon probiert!

[Fehler] Unit1.pas(10): Typ 'TMeineKlasse' ist nicht vollständig definiert

Muetze1 17. Okt 2007 15:38

Re: Forward Deklaration von Klassen
 
Zitat:

Zitat von Infect
[Fehler] Unit1.pas(10): Typ 'TMeineKlasse' ist nicht vollständig definiert

Dann hast du wohl das Semikolon nach dem class vergessen.

MatthiasR 17. Okt 2007 15:46

Re: Forward Deklaration von Klassen
 
Da muss ich dich leider enttäuschen, das habe ich nämlich nicht!

Kann es evtl. an irgendeinem Schalter im Delphi 7 liegen, dass es keine Forward Deklarationen annimmt?!?

Muetze1 17. Okt 2007 15:52

Re: Forward Deklaration von Klassen
 
Nein, kann es nicht. Es ist ein Standard und funktioniert seit mindestens D4 und ich kenne keinen Schalter der dieses Sprachfeature auch nur bedingt beeinflusst. Ich nutze es seit Jahren und es kan noch lange so weiter gehen.

Grundlegend: Code wurde oben gegeben. Grundlegende Regeln:

1. Wenn du eine Forward Deklaration machst, muss diese Klasse auch in dem selben Type-Block deklariert werden. (also kein erneuter "Type")
2. Keine Angabe von der Basisklasse in der Forwarddeklaration. Einfach nur "class;"
3. Eine Forwarddeklaration muss auch in der Unit (und selben Type, siehe 1.) deklariert werden.

Vielleicht steht ja noch ein Buchstabe o.ä. rechts im nicht sichtbaren Bereich (weggescrollt?)

uligerhardt 17. Okt 2007 15:53

Re: Forward Deklaration von Klassen
 
Das:
Delphi-Quellcode:
type
  TDebugActionForm = class; //forward

  TDebugAction = class
  private
    FForm: TDebugActionForm;
  end;

  TDebugActionForm = class(TForm)
    // schnipp
  end;
funktioniert bei mir (und vermutlich in allen Delphi-Versionen seit Neunzehnhundertfeuerzeug :-D).

DerDan 17. Okt 2007 15:54

Re: Forward Deklaration von Klassen
 
hallo,


zwischen der Forward Deklaration und der eigentlichen Deklaration darf das type nicht mehr auftauchen. sonst gibt es die Meldung!


Fehlermeldung selektieren und F1 drücken soll auch helfen!

Delphi-Quellcode:
type // 1
  TABC = class;

  TABC = class
    FABC : integer;
  end;

type // 3
  TDEF = class; // <--- hier Fehlermeldung

type // 4       // wegen "type"

  TDEF = class
    FABC : integer;
  end;



mfg

derDan

MatthiasR 17. Okt 2007 15:55

Re: Forward Deklaration von Klassen
 
OK, ich habe nun den "Fehler" gefunden. Man muss natürlich auch die Unit "Classes" einbinden, sonst geht das ganze nicht. In meinem Beispiel war sie bereits eingebunden, weil ich einfach eine neue Anwendung erzeugt habe und die Unit1 dann abgeändert. In meiner richtigen Anwendung, wo dann der Fehler
Delphi-Quellcode:
Typ 'TMeineKlasse' ist nicht vollständig definiert
kam, hatte ich die entsprechende Unit per "Datei --> Neu" erzeugt und da sind logischerweise noch keinerlei Unit-includes vorhanden.

MatthiasR 17. Okt 2007 15:58

Re: Forward Deklaration von Klassen
 
ARGH, wieder falsch, es lag doch tatsächlich nur an dem zweiten "type", wie von DerDan richtig erkannt.
:duck:


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:21 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