Newsgroup: it.comp.lang.delphi
Titolo: Type TDateTime = Type Double

Ciao
Stiamo realizzando delle funzioni che lavorano su parametri di tipo diverso.
Tali funzioni sono in overload quindi hanno lo stesso nome e differiscono
per il tipo del parametro.
Esempio:
Func(par : double); overload;
Func(par : TDateTime); overload;
Ora abbiamo riscontrato il seguente problema:
Delphi non distingue tra il tipo TDateTime e il tipo Double, cosa alquanto
strana visto che TDateTime dovrebbe essere definito nel modo seguente (in
base all'help):
Type TDateTime = Type Double
cioè, sempre in base all'help, i due tipi dovrebbero essere considerati
diversi.
Esempio
var p : Double;
Func(p); // errore di compilazione per ambiguità
Mi sapete dare una spiegazione?
Ciao
GG

 diversi.
Delphi ha ragione.
Il valore 37277 che cos'e' ? un valore double letterale o 
il 21 gennaio 2002 ?
Per ottenere cio' che vuoi, devi definire la funzione
come i parametri per riferimento.
Solo in questo caso Delphi puo' distinguere.
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG




 Se non ricordo male in C++ funziona in entrambi i casi.
Anche in Delphi funziona in entrambi i casi, ma e'
ben diverso scrivere:
procedure Pippo(I: Integer); overload;
begin
  ShowMessage('intero');
end;
procedure Pippo(D: Double); overload;
begin
  ShowMessage('dobuble');
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
  Pippo(3);
  Pippo(3.4);
end;
Da cio' che hai scritto nel messaggio precedente.


 double ?
Scusami, ma stai esagerando. :)
Mi sa che con te discuterò spesso... producendo KB di post :)
Ciao
GG

Scusami, ma stai esagerando. :)
Per quale motivo ?
Delphi non puo' leggerti nel pensiero.  Tutto cio' che passi
e' un numero ed e' da qui che sorge l'ambiguita'.
-- 
Andrea Laforgia - walkietalkie(at)
libero.it
"Meglio cieco che negro" (Stevie Wonder)

cioè, sempre in base all'help, i due tipi dovrebbero essere considerati
diversi.
Su questo in particolare non sono d'accordo: se definisci un tipo Pippo =
integer, poi un Pluto = Pippo e un Poldo = Pluto, Poldo è e rimane comunque
un intero, indipendentemente da come lo chiami.
Spero di essere stato chiaro, cosa che non mi riesce mai... :)
Saluti,
Marco

 un intero, indipendentemente da come lo chiami.
Difatti, ma tieni presente che:
type Pippo = Integer;
e' molto diversa da:
type Pippo = type Integer;


 passati per valore.
Quindi un Func(TDateTime(a)) dovrebbe essere sufficiente a chiarire i dubbi
al compilatore.. O no?
Non ho avuto il tempo di provare, fatemi sapere. :)
Saluti,
Marco

Non ho provato, ma da quello che penso di aver capito non basta.
La nota spiega tutto:
Special conversion rules apply to the TDateTime real type
Ciao
GG
"Ender Motion" <re...@to.newsgroup> wrote in message
news:m5938.10651$Rv3.4...@news2.tin.it...


 wrote in message
news:3c4e63b3...@news.tin.it...


 Un giorno capirņ perchč hanno fatto questa scelta...
Mi sa che di questo passo non lo capirai mai ;)


 Special conversion rules apply to the TDateTime real type
La nota non spiega un bel niente.  
Le regole di trasformazione del TDateTime non c'entrano nulla.  
Avresti lo stesso effetto se utilizzassi due interi:
<CODE>
type MioIntero = type Integer;
procedure Pippo(A: MioIntero); overload;
begin
  ShowMessage('MioIntero');
end;
procedure Pippo(A: Integer); overload;
begin
  ShowMessage('Integer');
end;
procedure TForm1.Button1Click(Sender: TObject);
var
  A: Integer;
begin
  A := 3;
  Pippo(A);  <<<<---- ambiguita'
end;
</CODE>


 al compilatore.. O no?
Neanche, se i parametri vengono passati per valore.
