AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Konstanten-Array ist nicht konstant

Ein Thema von darktrym · begonnen am 10. Nov 2020 · letzter Beitrag vom 10. Nov 2020
Antwort Antwort
darktrym

Registriert seit: 17. Jun 2020
11 Beiträge
 
Delphi 5 Professional
 
#1

Konstanten-Array ist nicht konstant

  Alt 10. Nov 2020, 10:39
Delphi-Version: 10.2 Tokyo
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:
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);
Der Zugriff erfolgt dann via:

Delphi-Quellcode:
Case x of
cMfc_MessageTypes[MMT_Inserted]: y;
end;
Wie erstelle ich nun einen Konstanten-Array?
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Konstanten-Array ist nicht konstant

  Alt 10. Nov 2020, 10:54
Meinst du vielleicht so etwas?
Delphi-Quellcode:
var
  x: Integer;
begin
  Case x of
    Byte(MMT_Inserted): ;
  end;
Du musst den Typ ohne Umwandlung durch ein Array angeben. Entweder so oder mit expliziten Konstanten oder ähnlichem.

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).
Sebastian Jänicke
AppCentral

Geändert von jaenicke (10. Nov 2020 um 10:57 Uhr)
  Mit Zitat antworten Zitat
Papaschlumpf73

Registriert seit: 3. Mär 2014
Ort: Berlin
442 Beiträge
 
Delphi 12 Athens
 
#3

AW: Konstanten-Array ist nicht konstant

  Alt 10. Nov 2020, 10:59
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...
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Konstanten-Array ist nicht konstant

  Alt 10. Nov 2020, 16:42
Ohne jetzt auf dein speziellen Fall Rücksicht zu nehmen. Hier ein Beispiel für ein const String-Array
Das ändert doch an dem Problem nichts. Auch damit gibt es kein automatisches Mapping auf einen anderen Integerwerts als den in der Enumeration selbst den Werten zugewiesene. Das ist aber auch nicht in der Form möglich.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#5

AW: Konstanten-Array ist nicht konstant

  Alt 10. Nov 2020, 17:36
Entweder if x = cMfc_MessageTypes[MMT_Inserted] then y else if ...

oder du mußt eben dort Konvertieren, wo du keine Konstante brauchst.
Delphi-Quellcode:
case cMfc_IntToMessageTypes(x) of
  MMT_Inserted: y;
end;
Ginge als Funktion oder als Array tMfc_MessageTypeArray = array[Byte] of tMfc_MessageTypes; , nur hat dann dein Array natürlich viele Lücken, welche in der Array-Konstante dann mit irgendwas gefüllt werden müssten.
Wobei die Funktion auch das alte Array nutzen könnte, um darin den Wert zu suchen.
$2B or not $2B

Geändert von himitsu (10. Nov 2020 um 18:34 Uhr)
  Mit Zitat antworten Zitat
Papaschlumpf73

Registriert seit: 3. Mär 2014
Ort: Berlin
442 Beiträge
 
Delphi 12 Athens
 
#6

AW: Konstanten-Array ist nicht konstant

  Alt 10. Nov 2020, 17:45
Ohne jetzt auf dein speziellen Fall Rücksicht zu nehmen. Hier ein Beispiel für ein const String-Array
Das ändert doch an dem Problem nichts. Auch damit gibt es kein automatisches Mapping auf einen anderen Integerwerts als den in der Enumeration selbst den Werten zugewiesene. Das ist aber auch nicht in der Form möglich.
Sorry, ich hatte nur die Frage gelesen:
"Wie erstelle ich nun einen Konstanten-Array?"

Ich muss mir einfach mal mehr Zeit nehmen...
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#7

AW: Konstanten-Array ist nicht konstant

  Alt 10. Nov 2020, 18:30
Das Array ist zwar eine Konstante, aber auch nicht,
und dein Zugriff auf dieses Array cMfc_MessageTypes[MMT_Inserted] ist somit auch nicht konstant.

"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}
$2B or not $2B
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:54 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz