Fehlermeldung

hi,
ich schreib ein programm, um rekursion zu üben. grundidee ist die faktorielle:
fakt(n) = n * fakt(n-1)

ich hab das so weit auch in etwa hingekriegt, bekomme aber im vereinbarungsteil des programms unter „type“ auf die zeile
function fakt(var n: integer): integer;
die fehlermeldung:
„Ungenügende Forward- oder External-Deklaration: ‚TForm1.fakt‘“

was ist da „ungenügend“? was ist zu tun?
any help appreciated :smile:

m.

Hallo!

Ist die Deklaration im Vereinbarungsteil (a) eine Methode (von TForm1) oder ist es (b) eine eigenständige Funktion?

Wenn (a), dann muss im Implementationsteil selbige Methode auch als solche definiert werden:

Function **TForm1**.fakt(n:integer):ingeger;
begin ... end;

Dabei ist „TForm1“ eben der Klassenbezeichner der Klasse, welche die Methode „fakt“ enthält.

Wenn (b), dann reicht als Implementation ein

Function fakt(n:integer):ingeger;
begin ... end;

Deine Fehlermeldung spricht dafür, dass du (a) deklariert aber (b) implementiert hast. Entweder mußt du in beiden Fällen (a) oder (b) nehmen - gemischt geht nicht.

LG
Jochen

hi,

Ist die Deklaration im Vereinbarungsteil (a) eine
Methode (von TForm1) oder ist es (b) eine eigenständige
Funktion?

gedacht isses als eigenständige funktion, wird aber offensichtlich nicht als solche akzeptiert.
was muss ich tun, damit schon?

aber danke schon mal.
m.

Hallo,

Wenn (a):

**interface**
...
**type**
 TForm1 = class(TForm)
 ...
 function fakt(n:integer):integer;
 ...
 end;
...
**implementation**
...
function TForm1.fakt(n:integer):integer;
begin
 ...
end;
...

Wenn (b):

**interface**
**type**
 TForm1 = class(TForm)
 ...
 end;
...
function fakt(n:integer):integer;
...
**implementation**
...
function fakt(n:integer):integer;
begin
 ...
end;
...

Wie gesagt, entweder (a) oder (b). Kommt darauf an, ob „fakt“ eine Mothode von TForm1 sein soll (Fall a) oder eine eigenständige Funktion (Fall b).

LG
Jochen

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]