Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Interface Deklaration von Klassen


baphumet - Mi 07.10.09 20:18
Titel: Interface Deklaration von Klassen
Hallo, wenn man in einer Unit Methoden hat und eine die andere aufrufen möchte, aber Sie hinter der ersten steht, so folgt die Meldung Undeclared Identifier. Deswegen werden die Methoden im Interface-Teil aufgeführt, das ist mir soweit bekannt und ich verstehe dies auch, bei C ist das zwar nicht notwendig und er compilierts.

Jetzt meine Frage, ist dies auch mit Klassen möglich, habe nichts dazu in der Hilfe
gefunden?


FinnO - Mi 07.10.09 20:53

meinst du soetwas?


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
type TFoo=class
  public bar : TBar //das geht nicht, weil TBar erst unten definiert wird
end;

type TBar=class
  public foo : TFoo //geht, weil Foo schon definiert ist
end;


Tryer - Mi 07.10.09 21:01

Normalerweise deklariere ich alles im interface-Abschnitt, dann stellt sich die Frage kaum.

Geht es Dir um zirkuläre Bezüge unter Klassen?

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
type //alles im selben type - Abschnitt!

  TMyClass = class//Vorabdeklaration

  TMyOtherClass = class
  private
    FMyField: TMyClass; // obwohl TMyClass noch nicht näher definiert ist zulässig
   ..
  end;
 
  TMyClass = class
  private
    FMyOtherField: TMyOtherClass; //"regulär", TMyOtherClass bereits bekannt


Grüsse, Dirk


baphumet - Mi 07.10.09 21:05

Ihr habt mich missverstanden glaub ich, ich wollte fragen ob dies möglich ist

Delphi-Quelltext
1:
2:
3:
4:
interface
  procedure abc;
  function a1():string;
  //geht hier auch class


Denn in meiner Unit befinden sich 4 Klassen, 3 von diesen sind von der ersteren abgeleitet um dort speziell Ihre Tätigkeiten auszuführen, doch die Ausagbemethoden möchte ich in der ersten Klasse haben. Ich leg mal mein Code bei.

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
unit KOMPLEX;
interface
  uses Sysutils,math;
type
  TKlasse=class
public
    ...
    function Ausgabe1(z1: TKlasse1):String;
    function Ausgabe2(z1: TKlasse2):String;
    function Ausgabe3(z1: TKlasse3):String;
  end;
  TKlasse1=class(TKlasse)
  private
    a,b: EXTENDED;
  public
    constructor Create(a1,b1: EXTENDED);
    ...
  end;
  TKlasse2=class(TKlasse)
  private
    r,alpha: EXTENDED;
  public
    constructor Create(r1,alpha1: EXTENDED);
    ...
  end;
  TKlasse3=class(TKlasse)
  private
    r,phi: EXTENDED;
  public
    constructor Create(r1,phi1: EXTENDED);
    ...
  end;
implementation


FinnO - Mi 07.10.09 21:09

jop


baphumet - Mi 07.10.09 21:18

user profile iconFinnO hat folgendes geschrieben Zum zitierten Posting springen:
jop

Heißt das jetzt ja das wir uns missverstanden haben oder ja da dies möglich ist?


Tryer - Mi 07.10.09 21:21


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
interface

uses
  Windows, ...;

type // Typdeklaration
  TMyClass = class(TWasWeisIch)
  private
    FFoo : Integer;
  protected
  public
    property Foo: Integer read FFoo write FFoo;
  end;

  TMyArray = array of TMyClass;


  procedure abc;
  function a1():string;

var
  GlobaleVar: TWollenWirEigentlichNicht;

const
  UnitVersion = '1.0.0';

implementation
..

Es ist meistens sinnvoll Typen vor Prozeduren/Funktionen zu deklarieren, da man die Typen da ja meistens benutzt.


FinnO - Mi 07.10.09 21:30

jop meinte so viel wie "ja, das geht"