Sto provando a definire un const in Delphi (Delphi 2005) che è basato su altre costanti, ma Delphi si lamenta che non è un'espressione costante. Questo è ciò che il mio codice è simile:Errore nella definizione delle costanti in Delphi
program myProgram;
const
Xpoints = 20;
Ypoints = 30;
ArraySize = trunc(sqrt(Xpoints*Ypoints));
var
myArray : array[1..ArraySize] of integer;
ho potuto fare arraysize = Xpoints * Ypoints ma lo sqrt causa problemi. L'idea è che vorrei che la matrice fosse dimensionata dalle costanti Xpoints e Ypoints. Potrei fare qualcosa del genere:
program myProgram;
const
sqrtXpoints = 4.472135956;
sqrtYpoints = 5.47722557506;
Xpoints = trunc(sqrtXpoints*sqrtXpoints);
Ypoints = trunc(sqrtYpoints*sqrtYpoints);
ArraySize = trunc(sqrtXpoints*sqrtYpoints);
var
myArray : array[1..ArraySize] of integer;
avendo cura di sovrastimare leggermente i valori della radice quadrata per il trunc. Tutto verrà aggiornato correttamente se cambio sqrtXpoints o sqrtYpoints, ma questo approccio sembra proprio così ... stupido.
Come una soluzione temporanea che posso valutare la costante di me in questo modo:
program myProgram;
const
Xpoints = 20;
Ypoints = 30;
ArraySize = 24;
var
myArray : array[1..ArraySize] of integer;
ma non mi piace questo perché arraysize non aggiorna automaticamente se cambio Xpoints o Ypoints.
Sembra che il compilatore dovrebbe sapere come valutare una costante definita come una funzione matematica di un'altra costante in fase di compilazione per cose come l'esempio di cui sopra e per le cose ancora più semplici come questo:
const
pi = 4.0*arctan(1.0);
ma io non riesco a farlo accettare. Eventuali suggerimenti? Grazie in anticipo per il vostro aiuto!
È semplicemente non può utilizzare le funzioni in dichiarazioni di costanti. –
Il compilatore non valuterà 'sqrt'. Potresti, suppongo, usare una costante tipizzata e correggerla al momento dell'inizializzazione. Avresti bisogno di un paio di chiamate VirtualAlloc per farlo volare. –
Un'altra soluzione alternativa consiste nell'utilizzare un compilatore che è meno schizzinoso sulle espressioni costanti (fpc). – OnTheFly