![]() |
Delphi-Version: 12 Athens
Konstantenausdruck verletzt untere Grenze
Code:
var validSetup: boolean; samplesPerSecond: Integer; ..... validSetup := (samplesPerSecond in [48000, 96000]); Fehlermeldung des Compilers: Konstantenausdruck verletzt untere Grenze ?????? |
AW: Konstantenausdruck verletzt untere Grenze
Der Fehler ist eigentlich, dass in Wirklichkeit die obere Grenze verletzt wird. :lol:
Nja, leider ist das, was du da hast kein Array, sondern ein SET und das geht nur von 0 bis 255. Mir wäre auch lieber, wenn der Compiler so schlau wäre und in diesem Fall ein Array daraus machen würde. PS: Das ist auch der Grund, warum Emba mal dieses grauenhaft perverse ![]()
Delphi-Quellcode:
ist ebenfalls ein SET und da passt nunmal Unicode/WideChar nicht rein.
C in ['a', 'z']
Besonders perfide ist aber, dass CharInSet ebenfalls intern das SELBE macht und es somit absolut keinen Mehrwert erbringt, außer dass keine Compilerwarnung angezeigt wird. (die man aber alternativ auch einfach deaktivieren kann). Und wenn man wirklich ein Array daraus machen würde, dann bemerkst du, dass es leider keinen "Standard-Operator" IN für Integer+Array gibt.
Delphi-Quellcode:
Leider gibt es in Delphi (SysUtils, Math, ...) auch keine fertige Funktion dafür,
function ArrayOf(Values: array of Integer): TArray<Integer>;
begin ... end; validSetup := (samplesPerSecond in ArrayOf([48, 96])); so wie z.B. aus den StrUtils das
Delphi-Quellcode:
.
B := MatchStr(S, ['a', 'bb']);
OK, gibt es doch, aber ob man
Delphi-Quellcode:
wirklich als schöne Lösung ansehn will?
B := TArray.Contains<Integer>([123, 456], s);
Zu beachten ist auch, dass bei dieser TArray-Klasse einige/viele Methoden ausschließlich mit sortieren Arrays funktionieren. |
AW: Konstantenausdruck verletzt untere Grenze
Danke für die Erläuterung. In ist sozusagen für die Katz und für Mausclicks und Font.Style.
Code:
:-)
validSamplerate = CharInSet( Char(samplerate), Char(48000), Char(96000))
|
AW: Konstantenausdruck verletzt untere Grenze
Keine Ahnung, was CharInSet bei dir ist, aber ich gehe mal ganz stark davon aus, dass das immer zu False evaluiert, denn Char(SampleRate) ist nie zwischen #48000 und #30464, weil das dritte Argument kleiner als das zweite ist.
Nicht willkürlich konvertieren, nur weil es geht. Es muss auch Sinn ergeben. Korrekt wäre ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:47 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz