AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Forward Deklaration von Klassen

Ein Thema von MatthiasR · begonnen am 17. Okt 2007 · letzter Beitrag vom 18. Okt 2007
Antwort Antwort
Seite 1 von 2  1 2      
MatthiasR

Registriert seit: 21. Apr 2005
193 Beiträge
 
#1

Forward Deklaration von Klassen

  Alt 17. Okt 2007, 15:25
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.
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#2

Re: Forward Deklaration von Klassen

  Alt 17. Okt 2007, 15:32
Lass "(TObject)" weg. Eine Forward Deklaration lautet einfach nur
Delphi-Quellcode:
type
  TDeineKlasse = class;
  Mit Zitat antworten Zitat
MatthiasR

Registriert seit: 21. Apr 2005
193 Beiträge
 
#3

Re: Forward Deklaration von Klassen

  Alt 17. Okt 2007, 15:37
Auch schon probiert!

[Fehler] Unit1.pas(10): Typ 'TMeineKlasse' ist nicht vollständig definiert
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#4

Re: Forward Deklaration von Klassen

  Alt 17. Okt 2007, 15:38
Zitat von Infect:
[Fehler] Unit1.pas(10): Typ 'TMeineKlasse' ist nicht vollständig definiert
Dann hast du wohl das Semikolon nach dem class vergessen.
  Mit Zitat antworten Zitat
MatthiasR

Registriert seit: 21. Apr 2005
193 Beiträge
 
#5

Re: Forward Deklaration von Klassen

  Alt 17. Okt 2007, 15:46
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?!?
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#6

Re: Forward Deklaration von Klassen

  Alt 17. Okt 2007, 15:52
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?)
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.735 Beiträge
 
Delphi 2007 Professional
 
#7

Re: Forward Deklaration von Klassen

  Alt 17. Okt 2007, 15:53
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 ).
Uli Gerhardt
  Mit Zitat antworten Zitat
DerDan

Registriert seit: 15. Nov 2004
Ort: Donaueschingen
251 Beiträge
 
Delphi XE3 Professional
 
#8

Re: Forward Deklaration von Klassen

  Alt 17. Okt 2007, 15:54
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
nichts ist so schön wie man es sich vorstellt
  Mit Zitat antworten Zitat
MatthiasR

Registriert seit: 21. Apr 2005
193 Beiträge
 
#9

Re: Forward Deklaration von Klassen

  Alt 17. Okt 2007, 15:55
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 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.
  Mit Zitat antworten Zitat
MatthiasR

Registriert seit: 21. Apr 2005
193 Beiträge
 
#10

Re: Forward Deklaration von Klassen

  Alt 17. Okt 2007, 15:58
ARGH, wieder falsch, es lag doch tatsächlich nur an dem zweiten "type", wie von DerDan richtig erkannt.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:26 Uhr.
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