Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Nicht genügend wirkliche Parameter??


Lauzijungs - So 02.04.06 21:24
Titel: Nicht genügend wirkliche Parameter??
Hallo,
habe schon mehrmals folgende Fehlermeldung zu stehen gehabt:

[Fehler] Unit1.pas(40): Nicht genügend wirkliche Parameter

Zum Beispiel in meinem derzeitigen Quelltext:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
PROCEDURE FindeErstenUndLetzten(Eing:stringvar EB, LB:char);
var anz:integer;
BEGIN
EB:=Eing[1];
anz:=length(Eing);
LB:=Eing[anz];
end;

procedure TForm1.Button1Click(Sender: TObject);
var Eing,a:string;
BEGIN
Eing:=Edit1.Text;
a:=FindeErstenUndLetzten(Eing);  // <---
Label1.Caption:=a;
END;
end.



Was will mir diese Fehlermeldung denn sagen? In diesem Fall bezieht sie sich auf die Zeile, wo ich den Pfeil hingesetzt hab. Wo liegt da mein Fehler?
Würde mich über Antwort sehr freuen.

Moderiert von user profile iconGausi: Delphi-Tags hinzugefügt


Born-to-Frag - So 02.04.06 21:27

weil er noch 2 Parameter mehr will: EB und LB


Lauzijungs - So 02.04.06 21:43

Und was soll ich da zu diesen beiden Parametern noch schreiben?


Ironwulf - So 02.04.06 21:46

im grunde weglassen, und ne zeile tiefer deklarieren, da die eh nit als weitergegeben parameter verwendest


Lauzijungs - So 02.04.06 21:53

Inwiefern soll ich sie denn nochmal deklarieren?
Reicht da nicht das was da oben steht?
Und wo sollte ich das dann hinschreiben?


Ironwulf - So 02.04.06 21:56


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
PROCEDURE FindeErstenUndLetzten(Eing:string);  
var anz:integer;  
    EB, LB:char
BEGIN  
EB:=Eing[1];  
anz:=length(Eing);  
LB:=Eing[anz];  
end;


mkinzler - So 02.04.06 21:59

Dann kann er sie aber auch gleich ganz weglassen! Oder halt die Funktion so wie deklariert aufzurufen:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure TForm1.Button1Click(Sender: TObject);
var Eing,a:string;
    eb, lb: char;
BEGIN
    Eing:=Edit1.Text;
    a:=FindeErstenUndLetzten(Eing, eb, lb);  // <---
    Label1.Caption:=a;
END;


Lauzijungs - So 02.04.06 22:03

Und was schreib ich dann in die Prozedur TFormButton1.Click?


mkinzler - So 02.04.06 22:06

So wie du es aufrufst kann ja nicht so funktionieren, es ist ja eine Prozedur keien Funktion. Eine Frage was soll an a zurückgegeben werden?


Lauzijungs - So 02.04.06 22:26

Stimmt, könnte ich auch gleich so schreiben:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure TForm1.Button1Click(Sender: TObject);
var Eing,a:string;
EB, LB:char;
BEGIN
Eing:=Edit1.Text;
Label1.Caption:=FindeErstenUndLetzten(Eing, eb, lb);
END;
end.


Nur besteht jetzt das Problem, dass er mir sagt:
Inkompatible Typen 'string' und procedure'
bei der Zeile Label1.Cation

Moderiert von user profile iconraziel: Delphi-Tags hinzugefügt


JayEff - So 02.04.06 22:29

Yo also entweder du schreibst

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
function ersterUletzter(eingabe:String):array[0..1of String;
begin
  result[0]:=Eingabe[1];
  result[1]:=Eingabe[length(Eingabe)];
end;
{aufruf:}
e:=ersterUletzter('hallo')[0];
l:=ersterUletzter('hallo')[1];
//dann ist der erste Buchstabe in e und der letzte in l

oder

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure ersterUletzter(eingabe:Stringvar erster,letzter:Char);
begin
  erster:=Eingabe[1];
  letzter:=Eingabe[length(Eingabe)];
end;
{aufruf:}
ersterUletzter('hallo',e,l);
//dann ist der erste Buchstabe in e und der letzte in l

*edit: kleiner fehler..


mkinzler - So 02.04.06 22:29

Du hast das irgendwie falsch verstanden eine Prozedur liefret keinen Rückgabewert. Was also soll zurückgegeben werden.


Lauzijungs - So 02.04.06 22:47

Oh stimmt, hast Recht. Ich seh grad, dass wir das in ne Function umschreiben sollten, tut mir Leid.