Da ich gerade das selbe Problem habe habe ich diesen Thread gefunden
Zitat von
jim_raynor:
Ja, bei Überladenene Funktionen müssen sich die Parameter unterscheiden, denn sonst weiß der Compiler nicht welche Funktion genutzt werde soll. Entweder nutzt du Variants (was natürlich wesentlich langsamer ist) oder du musst einfach die Funktionen unterschiedlich benennen, so wie es bei verschiedenen Inkarnationen von TRegistry und ähnlichem der Fall ist.
Ich habe folgenden Code:
Delphi-Quellcode:
interface
function Test(Bla: String): String; overload;
function Test(Bla: String): Integer; overload;
implementation
function Test(Bla: String): String;
begin
Result := 'Hallo '+Bla;
end;
function Test(Bla: String): Integer;
begin
Result := StrToIntDef(Bla, 0);
end;
procedure Hallo;
var
i : Integer;
s : String;
begin
s := Test('Peter');
i := Test('12345');
end;
end.
Der Compiler weiß doch, dass s ein String und i ein Integer ist. Wieso ist er also nicht in der Lage herauszufinden, dass s die Funktion benötigt, die ein String zurückgibt und i die entsprechende Integer-Variante?
Das das bei Prozeduren mit selben Parametern nicht funktionieren kann ist klar, aber bei Funktionen ist diese Einschränkung doch etwas unlogisch.
Ich verweise da mal auf die nette Funktion Explode aus der Code-Library. Die gibt dort ein String-Array zurück. Genauso gut kann man die aber auch so umschreiben, dass ein Integer-Array zurück gegeben wird. Und das bei der selben Parameter-Liste.
Und genau das ist z.Z. mein Problem.
Dass ich die Funktion wohl nicht beliebig nutzen kann, nur weil der Compiler es nicht mag, wenn nur der Ergebnis-Typ unterschieldich ist