![]() |
Delphi-Version: 10.2 Tokyo
Konstanten-Array ist nicht konstant
Eigentlich sollte das recht trivial sein aber der Compiler meldet stets das folgendes Konstrukt nicht konstant (genug) ist und deshalb im Case-Block nicht verwendet werden kann:
Delphi-Quellcode:
Der Zugriff erfolgt dann via:
type
tMfc_MessageTypes = (MMT_None{=0}, MMT_PalletComplete{=90}, MMT_Inserted{=100}); tMfc_MessageTypeArray = array[tMfc_MessageTypes] of integer; const cMfc_MessageTypes: tMfc_MessageTypeArray = (0, 90, 100);
Delphi-Quellcode:
Wie erstelle ich nun einen Konstanten-Array?
Case x of
cMfc_MessageTypes[MMT_Inserted]: y; end; |
AW: Konstanten-Array ist nicht konstant
Meinst du vielleicht so etwas?
Delphi-Quellcode:
Du musst den Typ ohne Umwandlung durch ein Array angeben. Entweder so oder mit expliziten Konstanten oder ähnlichem.
var
x: Integer; begin Case x of Byte(MMT_Inserted): ; end; Das Mapping der Integerwerte musst du vorher selbst über das Array machen oder die Werte MMT_Inserted direkt in der Deklaration zuweisen (wie du es ja auskommentiert schon drin hast). |
AW: Konstanten-Array ist nicht konstant
Ohne jetzt auf dein speziellen Fall Rücksicht zu nehmen. Hier ein Beispiel für ein const String-Array
const MyArray: array[0..2] of String=( ('String0'), ('String1'), ('String2')); Das kannst du bestimmt adaptieren... |
AW: Konstanten-Array ist nicht konstant
Zitat:
|
AW: Konstanten-Array ist nicht konstant
Entweder
Delphi-Quellcode:
if x = cMfc_MessageTypes[MMT_Inserted] then y else if ...
oder du mußt eben dort Konvertieren, wo du keine Konstante brauchst.
Delphi-Quellcode:
Ginge als Funktion oder als Array
case cMfc_IntToMessageTypes(x) of
MMT_Inserted: y; end;
Delphi-Quellcode:
, nur hat dann dein Array natürlich viele Lücken, welche in der Array-Konstante dann mit irgendwas gefüllt werden müssten.
tMfc_MessageTypeArray = array[Byte] of tMfc_MessageTypes;
Wobei die Funktion auch das alte Array nutzen könnte, um darin den Wert zu suchen. |
AW: Konstanten-Array ist nicht konstant
Zitat:
"Wie erstelle ich nun einen Konstanten-Array?" Ich muss mir einfach mal mehr Zeit nehmen... |
AW: Konstanten-Array ist nicht konstant
Das Array ist zwar eine Konstante, aber auch nicht,
und dein Zugriff auf dieses Array
Delphi-Quellcode:
ist somit auch nicht konstant.
cMfc_MessageTypes[MMT_Inserted]
"typisierte" Konstanten sind eigentlich nur "schreibgeschützte" Variablen.
Delphi-Quellcode:
const
A = 0; // "echte" Konstante B: Integer = 0; // Konstante (aber intern eine schreibgeschützte globale Variable) {$IF A = 1} miep {$IFEND} {$IF B = 1} mööp {$IFEND} |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:24 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