Ich versuche, ein Konst in Delphi zu definieren (Delphi 2005), das auf anderen Konstanten basiert, aber Delphi beschwert sich darüber, dass es kein konstanter Ausdruck ist. Dies ist, was mein Code wie folgt aussieht:Fehler beim Definieren von Konstanten in Delphi
program myProgram;
const
Xpoints = 20;
Ypoints = 30;
ArraySize = trunc(sqrt(Xpoints*Ypoints));
var
myArray : array[1..ArraySize] of integer;
ich Arraysize tun konnte = xpoints * Ypoints aber die sqrt Probleme verursacht. Die Idee ist, dass ich möchte, dass das Array nach den Konstanten Xpoints und Ypoints sortiert wird. Ich könnte so etwas tun:
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;
achtet darauf, die Quadratwurzel-Werte für die Trunc etwas zu überschätzen. Alles wird korrekt aktualisiert, wenn ich sqrtXpoints oder sqrtYpoints ändere, aber dieser Ansatz scheint einfach so ... dumm.
Als temporäre Lösung kann ich die Konstante selbst wie folgt bewerten:
program myProgram;
const
Xpoints = 20;
Ypoints = 30;
ArraySize = 24;
var
myArray : array[1..ArraySize] of integer;
aber ich mag das nicht, weil Arraysize nicht automatisch aktualisiert, wenn ich xpoints oder Ypoints ändern.
Es scheint, wie der Compiler sollte wissen, wie eine Konstante als eine mathematische Funktion einer anderen Konstante bei der Kompilierung für Dinge wie das obige Beispiel und für eine noch einfachere Dinge wie diese definiert bewerten:
const
pi = 4.0*arctan(1.0);
aber ich Ich kann es nicht akzeptieren. Irgendwelche Vorschläge? Vielen Dank im Voraus für Ihre Hilfe!
Sie können einfach nicht in konstanten Deklarationen verwenden Funktionen. –
Der Compiler wertet 'sqrt' nicht aus. Sie könnten, denke ich, eine typisierte Konstante verwenden und sie zur Initialisierungszeit reparieren. Sie benötigen ein paar Aufrufe von VirtualAlloc, um das zu fliegen. –
Eine andere Problemumgehungsoption ist die Verwendung eines Compilers, der bei den konstanten Ausdrücken (fpc) weniger wählerisch ist. – OnTheFly