AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Overload-Problem bei currency und TDateTime
Thema durchsuchen
Ansicht
Themen-Optionen

Overload-Problem bei currency und TDateTime

Ein Thema von VizeTE · begonnen am 29. Okt 2009 · letzter Beitrag vom 29. Okt 2009
Antwort Antwort
VizeTE

Registriert seit: 31. Dez 2002
178 Beiträge
 
Delphi 5 Enterprise
 
#1

Overload-Problem bei currency und TDateTime

  Alt 29. Okt 2009, 13:17
Hallo,

ich habe da ein Problem mit einer überladenen Funktion.
Delphi-Quellcode:
  ...
  protected
    procedure Test(Value: currency); overload; virtual; abstract;
    procedure Test(Value: TDateTime); overload; virtual; abstract;
  ..
In einer Methode rufe ich dann folgendes auf:
Delphi-Quellcode:
...
var
  Value : currency;
begin
  Test(Value);
...
Das wird mit der Fehlermeldung "Doppeldeutiger überladener Aufruf von 'Test'" quittiert.
Abstrakt ist es nur zum testen, das gleiche Problem habe ich auch wenn die Prozeduren nicht abstrakt sind. Getestet habe ich das in Delphi5 und Delphi7.

TDateTime ist ja eigentlich ein double. Daher verstehe ich nicht warum es hier ein Problem gibt. Und noch viel mehr würde mich eine Lösung interessieren

Vielen Dank
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.202 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Overload-Problem bei currency und TDateTime

  Alt 29. Okt 2009, 13:20
Zitat von VizeTE:
TDateTime ist ja eigentlich ein double. Daher verstehe ich nicht warum es hier ein Problem gibt. Und noch viel mehr würde mich eine Lösung interessieren
currency ist auch 8 Byte und wird vermutlich auf double mit fester nachkommastellenanzahl gemappt. vermutlich kann der Compiler auf dieser Ebene nicht mehr unterscheiden.

Du brauchst also unterschiedliche Methodennamen.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Overload-Problem bei currency und TDateTime

  Alt 29. Okt 2009, 13:21
Currencz ist auch ein Fliesskommatyp, da weiss der Compiler dann wohl nicht welcher gemeint ist
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#4

Re: Overload-Problem bei currency und TDateTime

  Alt 29. Okt 2009, 13:27
Nein, Currency ist eigentlich ein Int64, welcher als Festkommatyp interpretiert wird.
Delphi sieht ihn leider zu oft als Fließkommatyp an und übersieht erstmal andere Currency-Definitionen.
TDateTime ist auch ein Double.


Was du versuchen kannst ist die Reihenfolge zu tauschen (erst TDateTime und dann Currency)
oder ist dieses
Delphi-Quellcode:
type
  TCurrency = type Currency;

...
protected
  procedure Test(Value: TCurrency); overload; virtual; abstract;
  procedure Test(Value: TDateTime); overload; virtual; abstract;
  ...

var
  Value : TCurrency;
begin
  Test(Value);
Ob das geht, ist nicht sichergestellt.

Aber direkt ist es nicht möglich Double und Currency zu mischen
Mein Ausweg war daher immer die Currency-Funktion umzubennen (TestC ... also überall ein C anzuhängen).
$2B or not $2B
  Mit Zitat antworten Zitat
VizeTE

Registriert seit: 31. Dez 2002
178 Beiträge
 
Delphi 5 Enterprise
 
#5

Re: Overload-Problem bei currency und TDateTime

  Alt 29. Okt 2009, 13:32
Zitat von mkinzler:
Currencz ist auch ein Fliesskommatyp, da weiss der Compiler dann wohl nicht welcher gemeint ist
Wenn ich in dem Beispiel TDateTime durch extended austausche funktioniert es aber.
Also scheint das nicht an den reinen Fließkomma-Format zu liegen. Vielleicht machen dort die 2 Byte mehr schon den Unterschied...

Zitat von himitsu:
Aber direkt ist es nicht möglich Double und Currency zu mischen
Mein Ausweg war daher immer die Currency-Funktion umzubennen (TestC ... also überall ein C anzuhängen).
Werde mal probieren ob ich den TDateTime-Aufruf auch mit einem extended umsetzen kann.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#6

Re: Overload-Problem bei currency und TDateTime

  Alt 29. Okt 2009, 14:00
Single oder Extended + Currency

hier wird vermutlich TDateTime auch die Funktion von Currency aufrufen
$2B or not $2B
  Mit Zitat antworten Zitat
VizeTE

Registriert seit: 31. Dez 2002
178 Beiträge
 
Delphi 5 Enterprise
 
#7

Re: Overload-Problem bei currency und TDateTime

  Alt 29. Okt 2009, 14:42
Zitat von himitsu:
Single oder Extended + Currency

hier wird vermutlich TDateTime auch die Funktion von Currency aufrufen
Das hast du wohl (leider) recht.

Zitat von himitsu:
Delphi-Quellcode:
type
  TCurrency = type Currency;

...
protected
  procedure Test(Value: TCurrency); overload; virtual; abstract;
  procedure Test(Value: TDateTime); overload; virtual; abstract;
  ...

var
  Value : TCurrency;
begin
  Test(Value);
Das hat leider auch nicht funktioniert.

Also bleibt mir wohl nichts anderes als die Methoden nicht zu überladen und stattdessen eindeutige Methodenbezeichner zu verwenden.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:54 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