Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi TDate und Real vertragen sich nicht bei Funktionsaufruf (https://www.delphipraxis.net/129467-tdate-und-real-vertragen-sich-nicht-bei-funktionsaufruf.html)

Mike_on_Tour 19. Feb 2009 17:05


TDate und Real vertragen sich nicht bei Funktionsaufruf
 
Hallo,

ich folgendes Problem mit diesen Funktionen:

UNIT_A.pas:
Delphi-Quellcode:
function GetValue (ParamIdent : String; ParamDefault : Real) : Real; overload;
function GetValue (ParamIdent : String; ParamDefault : TDate) : TDate; overload;

function GetValue (ParamIdent : String; ParamDefault : Real) : Real;
begin
  Result := ReadFloat (...);
end;

function GetValue (ParamIdent : String; ParamDefault : TDate) : TDate;
begin
  Result := ReadDate (...);
end;
UNIT_B.pas:
Delphi-Quellcode:
uses
  Unit_A;

var
  rValue : Real;
  dtValue : TDate;
begin
  rValue := GetValue ('Betrag', 0.00);
  dtValue := GetValue ('Datum', Date);
end;
Der Compiler schmeißt bei der zweiten Zeile (dtValue) eine Fehlermeldung "E2251 Doppeldeutiger überladener Aufruf von 'GetValue'". Delphi will hier auch die Funktion mit Real-Werten nehmen und das paßt halt nicht zum Datumstyp.

Am Ende eines langen Tages fällt mir aber dazu auch nichts anderes sein. Aber vielleicht kann mir ja jemand weiter helfen ?

Mike

himitsu 19. Feb 2009 17:11

Re: TDate und Real vertragen sich nicht bei Funktionsaufruf
 
Da 0.0 keinen Typ hat, weiß der Kompiler nun nicht welchen Float-Typ (Real oder Double/TDate) er dafür festlegen soll.

versuch mal
Delphi-Quellcode:
rValue := GetValue ('Betrag', Real(0.00));

oder

const myRConst: Double = 0.0;

rValue := GetValue ('Betrag', myRConst);
[edit]
sicher, daß er beim Zweiten meckert? :gruebel:

sowas wär schonmal "sinnlos"
Delphi-Quellcode:
dtValue := GetValue ('Datum', TDate(Date));

Mike_on_Tour 19. Feb 2009 17:20

Re: TDate und Real vertragen sich nicht bei Funktionsaufruf
 
Die 0.0 sollen eigentlich nur symbolisch für einen Real-Wert stehen.

Ja, er zeigt die zweite Zeile als die Zeile mit dem Fehler an.
Wenn ich die Maus auf 'GetValue' ziehe, bekomme ich als Hilfe die Funktion mit Real angezeigt. Demzufolge will er hier Real statt TDate verwenden. Das TDate im Prinzip auch eine Real-Zahl (Extended) ist, ist mir bekannt. Nur wie ganz ich die Funktion mit TDate verwenden ?

himitsu 19. Feb 2009 17:27

Re: TDate und Real vertragen sich nicht bei Funktionsaufruf
 
Delphi-Quellcode:
type
  TDateTime = type Double;
  TDate = type TDateTime;

  Real = Double;
ich vermute mal da liegt das Problem ... beides ist im Grunde ein Double

falls es nicht stört kannst du ja TDate und Co. auch als Double speichern, also nur noch eine Funktion.


Ansonsten bleibt dir hier nur noch die Möglichkeit die eine Funktion umzubenennen,
oder statt Real das kleinere Single oder das größere Extended zu nutzen

Mike_on_Tour 19. Feb 2009 17:37

Re: TDate und Real vertragen sich nicht bei Funktionsaufruf
 
Ja, da werde ich wohl den Datumswert auch als Zahl behandeln. Aber das Problem schiebe ich auf morgen. Vielleicht gibt es in den nächsten Stunden noch eine andere Idee. Ich mache erst mal mit einem anderen Problem weiter.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:55 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz