![]() |
Re: Funktion Überladen --> Doppeldeutiger überladener Auf
[OT] heute nicht mehr...[/OT]
Aber die Deklarationen sollten mal ohne die gegenseitigen Aufrufe probiert werden. Vielleicht läßt sich das damit etwas entflechten. Grüße, Messie |
Re: Funktion Überladen --> Doppeldeutiger überladener Auf
Hallo!
Vielen Dank für eure zahlreichen Beiträge. Ich hatte am Wochenende leider keine Gelegenheit zu antworten.
Code:
Das dies zu Problem führt verstehe ich. Bei einem Aufruf von Confuses(42) weiß der Compiler nicht, ob er die erste Variante aufrufen soll, oder die zweite Variante mit der Defaultbelegung für den zweiten Paramter (Confuses(42, 0)). Dieses Problem tritt bei meinen Funktionen aber eigentlich nicht auf. Hier sollte anhand der Paramter immer ganz eindeutig klar sein, welche Funktion genutzt werden soll.
procedure Confused([color=red]Integer[/color]);
procedure Confused([color=red]Integer[/color]; [color=silver]Integer=0[/color]); Um das Problem mit dem Default Paramter zu umgehen, habe ich noch eine weitere Funktion eingführt:
Delphi-Quellcode:
Wenn ich das Ganz nun mit folgenden Aufrufen teste, erhalte ich bei den 2, 3 und 4 die Meldung mit der doppeldeutigen Überladung:
{#1} function GetString(ID: Integer): String; overload;
{#2} function GetString(ID: Integer; StringOptions: TStringOptions): String; overload; {#3} function GetString(ID: Integer; Args: array of TVarRec): String; overload; {#4} function GetString(ID: Integer; StringOptions: TStringOptions; Args: array of TVarRec): String; overload;
Delphi-Quellcode:
Soweit ich das verstehe ich eigentlich in jeder Situation durch die Parameter ganz eindeutig bestimmt, welche Funtkion genutzt werden soll.
// 1. Parameter (Integer) --> Funktion #1
str := GetString(42); // 2. Parameter (Integer, TStringOptions) --> Funktion #2 str := GetString(42, [soQuoted]); // 3. Parameter (Integer, TVarRec) --> Funktion #3 str := GetString(42, ['hallo']); // 4. Parameter (Integer, TStringOptions, TVarRec) --> Funktion #4 str := GetString(42, [soQuoted], ['hallo']); Zitat:
Delphi-Quellcode:
function OverloadTest(ID: Integer): String; overload;
function OverloadTest(ID: Integer; Str: String): String; overload; .. OverloadTest(42); OverloadTest(42, 'hallo'); Zitat:
Zitat:
Zitat:
Falls es gar nicht anders geht werde ich es also so machen. Wenn aber noch jemand eine Idee für eine elegantere Lösung hat wäre ich dafür wirklich dankbar! Besten Dank Ares |
Re: Funktion Überladen --> Doppeldeutiger überladener Auf
Hallo,
ich wollte wegen meiner Frage kein neues Them aufmachen. Vielleicht kann mir ja hier schon jemand sagen, warum ich bei folgendem die besagte Fehlermeldung bekomme:
Delphi-Quellcode:
Mein Ziel - falls ich es auch anders erreichen kann - ist es, die Function auch mit TEdit.Text vom Typ TCaption als Parameter aufrufen zu können.
Function ExpandAz(Var Value: String): String; Overload;
Function ExpandAz(Value: TCaption): String; Overload; ... // ----------------------------------------------------------- // Erweitert ein Aktenzeichen, bei dem führende Nullen oder // die führenden "19" oder "20" bei der Jahreszahl weggelassen // wurden Function ExpandAz(Var Value: String): String; Var S : String; I : Integer; Begin Result:=''; If Value <> '' Then Begin S:=SepString(Value, '/'); // Aktenzeichen und Jahr trennen If TryStrToInt(S, I) Then // numerisches Aktenzeichen ? S:=FormatFloat('0000', I); // mit führenden Nullen If TryStrToInt(Value, I) Then Begin If I < 1999 Then Inc(I, 2000); // ggf. Dekaden ergänzen (1900er egal) S:=IntToStr(I); // kompl. Jahr in Str. umwandeln Result:=S + '/' + Value; // Az. und Jahr wieder zusammensetzen End; End; End; Function ExpandAz(Value: TCaption): String; Var S : String; Begin S:=Value; // auf String übertragen Result:=ExpandAz(S); End; Danke und Gruß, Alex |
Re: Funktion Überladen --> Doppeldeutiger überladener Auf
Zitat:
|
Re: Funktion Überladen --> Doppeldeutiger überladener Auf
Zitat:
Es stellt sich mir aber die Frage, warum ich dann eine Fehlermeldung bekomme. Denn wenn TCaption = String ist, dann müsste das auch der Compiler wissen (:lol:) und es wäre keine Fehlermeldung zu erwarten. Gruß und Danke, Alex |
Re: Funktion Überladen --> Doppeldeutiger überladener Auf
Der String ist in TDE eine Weiterleitung zum AnsiString.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:45 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-2025 by Thomas Breitkreuz