![]() |
Delphi akzeptiert konstante Menge nicht
Moin, moin,
ich habe eine häufig durchlaufende Funktion, die testen muss, ob eine Zahl den Werten 50, 100, 200, 400 oder 800 entspricht. Eigentlich wollte ich das über eine IN-Abfrage mit einer Menge lösen:
Delphi-Quellcode:
Leider mag der Compiler das nicht und bringt die Meldung "Konstantenausdruck verletzt untere Grenze". Die Hilfe sagt zu dieser Meldung nichts. Kann mir das jemand erklären und eventuell eine andere Lösung anbieten?
const
CGruppe = [50,100,200,400,800]; ... if (Zahl in CGruppe) then begin ... end; Danke easy |
Re: Delphi akzeptiert konstante Menge nicht
AFAIK können (ältere) Delphi-Versionen bei Mengen maximal Byte-Werte verarbeiten.
Aber du hast ja keine Menge (Set) definiert sondern ein Array.
Delphi-Quellcode:
for i := Low(CGruppe) to High(CGruppe) do
begin if Zahl = CGruppe[i] then ... end; |
Re: Delphi akzeptiert konstante Menge nicht
Die Zahlen sind zu groß, die maximale Größe eines Mengenelementes liegt bei 255.
|
Re: Delphi akzeptiert konstante Menge nicht
Das mit den Byte-Werten ist natürlich dumm :-(
Ich glaube aber, dass ich dann mit einer case-Anweisung besser fahren würde, weil es deutlich "billiger" ist als eine for-Schleife:
Delphi-Quellcode:
Danke.
case Zahl of
50, 100, 200, 400, 800 : begin ... end; end; |
Re: Delphi akzeptiert konstante Menge nicht
Clevere Lösung in meinen Augen :thumb:
|
Re: Delphi akzeptiert konstante Menge nicht
Oder die Menge um eine Zehnerpotenz reduzieren (5..80) und den Testwert anpassen, dann ginge es auch
|
Re: Delphi akzeptiert konstante Menge nicht
Zitat:
Delphi-Quellcode:
packen und mehrfach für unterschiedliche Arrays verwenden.
function IsInArray(Value: Integer; arr: array of Integer): Boolean;
|
Re: Delphi akzeptiert konstante Menge nicht
Zitat:
|
Re: Delphi akzeptiert konstante Menge nicht
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:18 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