Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Funktion Vorgabewert


LittleBen - Fr 10.02.12 20:23
Titel: Funktion Vorgabewert
Hallo,
gerade eben habe ich zum ersten Mal eine Fuktion mit Vorgabewerten geschrieben...was nicht funktioniert hat :D Mal wieder ein komisches Phänomen:
Kopf

Delphi-Quelltext
1:
function Test(nZahl: byte=0): boolean;                    

Funktion

Delphi-Quelltext
1:
2:
3:
4:
function TF_Main.Test(nZahl: byte=0): boolean; // oder nur "(nZahl: byte)" 
begin
 showmessage(inttostr(nZahl));
end;

Wenn ich diese Funktion nun so Test(); ausführe, dann wird die 0 ausgegeben. Soweit ist es richtig. Nun änder ich den Vorgabewert von 0 auf 1 und führe die Funktion erneut aus. Jetzt wird richtigerweise die 1 ausgegeben. Aber wenn ich danach wieder den Vorgabewert ändern, so wird immer wieder die 1 ausgegeben, egal was der eigentlich Vorgabewert ist.

Warum?

Viele Grüße,
Littleben


jaenicke - Fr 10.02.12 21:15

Entweder ist beim Aufruf etwas schief gegangen oder die Unit wurde nicht neu kompiliert. :nixweiss:
Am geposteten Quelltext an sich kann das nicht liegen.


LittleBen - Sa 11.02.12 00:05

Ok...ich fang gar nicht erst an mit der Bequemlichkeit :D Gibt eh nur Probleme!


Delete - Sa 11.02.12 10:46

user profile iconLittleBen hat folgendes geschrieben Zum zitierten Posting springen:
Hallo,
gerade eben habe ich zum ersten Mal eine Fuktion mit Vorgabewerten geschrieben...was nicht funktioniert hat :D Mal wieder ein komisches Phänomen:
Kopf

Delphi-Quelltext
1:
function Test(nZahl: byte=0): boolean;                    

Funktion

Delphi-Quelltext
1:
2:
3:
4:
function TF_Main.Test(nZahl: byte=0): boolean; // oder nur "(nZahl: byte)" 
begin
 showmessage(inttostr(nZahl));
end;

Wenn ich diese Funktion nun so Test(); ausführe, dann wird die 0 ausgegeben. Soweit ist es richtig. Nun änder ich den Vorgabewert von 0 auf 1 und führe die Funktion erneut aus. Jetzt wird richtigerweise die 1 ausgegeben. Aber wenn ich danach wieder den Vorgabewert ändern, so wird immer wieder die 1 ausgegeben, egal was der eigentlich Vorgabewert ist. Warum?


Kann ich hier nicht nachvollziehen. Mein Testcode:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
function TFormMain.Test(nZahl: byte=0): boolean;
BEGIN
     Result := FALSE;
     showmessage(inttostr(nZahl));
     Result := nZahl > 0;
END;

procedure TFormMain.Button2Click(Sender: TObject);
VAR
   Wert : Byte;
   Ergebnis : Boolean;
begin
     Wert := Round(JvSpinEdit1.Value);
     Ergebnis := Test();
     //Ergebnis := Test(Wert);
end;


Das funktioniert so, wie es soll ... :?!?:


jaenicke - Sa 11.02.12 11:02

Dass das eigentlich problemlos funktioniert, ist klar. Die Syntax benutze ich so oft, dass wir das sonst längst gemerkt hätten. (Gut, das passiert bei uns natürlich alles in neueren Delphiversionen, aber solche Probleme hatte sicher auch Delphi 7 nicht.)

Eine Idee habe ich aber noch:
@user profile iconLittleBen: Hast du das Update auf Delphi 7.1 bei dir installiert? Vielleicht gab es ja ohne Update noch manchmal ein Problem beim Kompilieren. :nixweiss:


LittleBen - Mi 15.02.12 22:35

Mhm...ich bin noch auf Version 7.0 :nixweiss: Werde am Wochenende mal updaten und nochmal probieren.


Tranx - Do 16.02.12 09:31

Also, ich habe das mit meiner Version (Delphi 5) ausprobiert. Es gibt da keinerlei Probleme. Wenn ich 0 als Vorgabewert angebe, ist der Wert in dem Parameter 0, wenn ich keine Variable mit der Funktion übergebe, und bei 1 1 und bei 0 dann wieder O. Voraussetzung ist natürlich - versteht sich von selber - dass man jedesmal das Programm neu kompiliert. Ansonsten, wenn man nur einfach den Wert ändert und dann ohne Kompilierung das Programm startet, kann ja keine Veränderung erfolgen.