Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Undeklarierte Prozeduren aufrufen (https://www.delphipraxis.net/100274-undeklarierte-prozeduren-aufrufen.html)

Doofy 25. Sep 2007 15:42


Undeklarierte Prozeduren aufrufen
 
Hallo!

Habe die Aufgabe bekommen, die Sierpinski-Kurve beliebiger Ordnung rekursiv (auf ein Canvas) zu zeichnen. Dazu habe ich zwar Hilfen bekommen (durch die ich noch durchsteigen muss), möchte allerdings erst einmal die auf Wikipedia angegebene Methode auf Delphi übertragen. Das Problem, das sich mir jetzt stellt, ist das, dass Prozeduren aufgerufen werden, die erst später deklariert werden können, da diese 4 Prozeduren sich untereinander aufrufen.

Bisher habe ich Folgendes:
Delphi-Quellcode:
 private
    { Private-Deklarationen }
    procedure sierpA (level:integer);
    procedure sierpB (level:integer);
    procedure sierpC (level:integer);
    procedure sierpD (level:integer);[
[...]
procedure sierpA (level:integer);
begin
  if level > 0 then
  begin
    sierpA (level-1); forwdNW (dist);
    sierpB (level-1); forwdN (dist*2); // Zeile 60
    sierpD (level-1); forwdSO (dist);
    sierpA (level-1);
  end;
end;

procedure sierpB (level:integer);
[usw]
Die Frage ist nun also, ob man das irgendwie biegen kann, dass keine Fehlermeldungen mehr à la "[Fehler] Unit1.pas(60): Undefinierter Bezeichner: 'sierpB'" mehr bekomme und ich das Programm kompilieren kann.
Bei Java scheint das zu klappen, bei Delphi allerdings nicht. :(

Bin für Antworten aller Art dankbar.

DeddyH 25. Sep 2007 15:46

Re: Undeklarierte Prozeduren aufrufen
 
Dadurch, dass Du die Methoden als private Klassenmethoden deklariert hast, musst Du sie im implementation-Teil auch als Klassenmethoden implementieren.

Delphi-Quellcode:
type TMyClass = class
  ...
  private
    procedure proc1;
    procedure proc2;
end;

implementation

procedure TMyClass.proc1;
begin
  ...
end;

procedure TMyClass.proc2;
begin
  ...
end;

Nuclear-Ping 25. Sep 2007 15:47

Re: Undeklarierte Prozeduren aufrufen
 
Deine Implementierungen sind keine Mitglieder einer Klasse. Im Interfaceteil oben hast du sie aber als Mitglieder einer Klasse (wohl deiner TForm1) deklariert. Entweder oder ... ;)

s-off 25. Sep 2007 15:48

Re: Undeklarierte Prozeduren aufrufen
 
Zitat:

Zitat von Doofy
Die Frage ist nun also, ob man das irgendwie biegen kann, dass keine Fehlermeldungen mehr à la "[Fehler] Unit1.pas(60): Undefinierter Bezeichner: 'sierpB'" mehr bekomme und ich das Programm kompilieren kann.

Ja, kann man. Und zwar, in dem man Klassenmethoden auch als solche implementiert.

Delphi-Quellcode:
Type
   TForm1 = Class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
   private
      Procedure Klassenmethode();
   End;

   procedure Keine_Klassenmethode();

Var
   Form1: TForm1;

Implementation

{$R *.dfm}

{ TForm1 }

procedure TForm1.Klassenmethode;
begin
   ShowMessage('Ich bin eine Klassenmethode');
end;

procedure Keine_Klassenmethode();
Begin
   Showmessage('Ich bin keine Klassenmethode');
End;

Edit: erst kein Roter Kasten und dann funzen auch noch die Delphi-Tags nimmer - was ist hier los?!?

Apollonius 25. Sep 2007 15:54

Re: Undeklarierte Prozeduren aufrufen
 
Wenn du es mit Funktionen statt mit Methoden implementieren willst (wo sind die militanten OOPler? :mrgreen:), dann kannst du die forward-Deklaration verwenden:
Delphi-Quellcode:
procedure sierpA (level:integer); forward;

procedure sierpB (level:integer);
begin
//...
end;

procedure sierpA (level:integer);
begin
//...
end;
@s-off: Das sind keine Klassenmethoden, sondern normale Methoden!
[edit] Wir geraten heute irgendwie oft wegen Nichtigkeiten aneinander. Sollte nur ein Klarstellung sein. [/edit]

s-off 25. Sep 2007 15:57

Re: Undeklarierte Prozeduren aufrufen
 
Zitat:

Zitat von Apollonius
@s-off: DAS SIND KEINE KLASSENMETHODEN, SONDERN NORMALE METHODEN!

Schrei doch nicht gleich so.
Entschuldige bitte, dass ich hier mit meiner Begriffswahl etwas falsch lag.
Ich bin halt davon ausgegangen, dass jemandem der Bezug so klarer ist; wusste ja nicht, dass Du dabei gleich Herzklabastern bekommst... :wall:

Dennoch korrekt, dass Du das hier klargestellt hast; aber der Ton spielt die Musik.

Doofy 25. Sep 2007 16:02

Re: Undeklarierte Prozeduren aufrufen
 
Das ging ja schneller als ich dachte. Nun meckert der Compiler auch nicht mehr, scheint also zu klappen.
Danke euch allen! :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:49 Uhr.

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