Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Konstanten-Deklaration eines mehrdimensionalen Arrays (https://www.delphipraxis.net/185333-konstanten-deklaration-eines-mehrdimensionalen-arrays.html)

TiGü 1. Jun 2015 13:30

Konstanten-Deklaration eines mehrdimensionalen Arrays
 
Hallo zusammen,

ich habe gerade einen gedanklichen Hänger nach dem Mittagessen.
Kann mir bitte jemand auf die Sprünge helfen?
Im folgenden Quelltext möchte ich ein zweidimensionales Array deklarieren, aber der Compiler sagt nö (E2026 Constant expression expected):

Delphi-Quellcode:
type
  TSoundAddressData = record
    Address : Integer;
    Data : Integer;
  end;

  TSoundSources = array [1 .. 3] of TSoundAddressData;
  TSoundChannels = array [1 .. 8] of TSoundSources;

const
  CHANNEL_1 : TSoundSources =
    (
    (Address : $0; Data : $01), // NF1
    (Address : $0; Data : $02), // NF2
    (Address : $0; Data : $04) // NF3
    );

  CHANNEL_2 : TSoundSources =
    (
    (Address : $0; Data : $08),
    (Address : $0; Data : $10),
    (Address : $0; Data : $20)
    );

  CHANNEL_3 : TSoundSources =
    (
    (Address : $0; Data : $40),
    (Address : $0; Data : $80),
    (Address : $1; Data : $01)
    );

  CHANNEL_4 : TSoundSources =
    (
    (Address : $1; Data : $02),
    (Address : $1; Data : $04),
    (Address : $1; Data : $08)
    );

  CHANNEL_5 : TSoundSources =
    (
    (Address : $1; Data : $10),
    (Address : $1; Data : $20),
    (Address : $1; Data : $40)
    );

  CHANNEL_6 : TSoundSources =
    (
    (Address : $1; Data : $80),
    (Address : $2; Data : $01),
    (Address : $2; Data : $02)
    );

  CHANNEL_7 : TSoundSources =
    (
    (Address : $2; Data : $04),
    (Address : $2; Data : $08),
    (Address : $2; Data : $10)
    );

  CHANNEL_8 : TSoundSources =
    (
    (Address : $2; Data : $20),
    (Address : $2; Data : $40),
    (Address : $2; Data : $80)
    );

  CHANNELS : TSoundChannels =
    (
    CHANNEL_1, // <---  [dcc32 Error] BlaBlipBlup.pas(132): E2026 Constant expression expected
    CHANNEL_2,
    CHANNEL_3,
    CHANNEL_4,
    CHANNEL_5,
    CHANNEL_6,
    CHANNEL_7,
    CHANNEL_8
    );

himitsu 1. Jun 2015 13:35

AW: Konstanten-Deklaration eines mehrdimensionalen Arrays
 
Typisierte Konstanten sind eigentlich schreibgeschützte Variablen, darum die Fehlermeldung. :angle:

Die Konstanten CHANNEL_1, CHANNEL_2 usw. kommen weg und die Werte davon kopierst du direkt an die jeweilige Stelle in CHANNELS.

TiGü 1. Jun 2015 13:42

AW: Konstanten-Deklaration eines mehrdimensionalen Arrays
 
Danke, so geht's! :thumb:
Trotzdem verhält sich der Compiler ein bisschen Muttihaft! :o

Delphi-Quellcode:
type
  TSoundAddressData = record
    Address : Integer;
    Data : Integer;
  end;

  TSoundSourceRange = 1..3;
  TChannelRange = 1..8;

  TSoundSources = array [TSoundSourceRange] of TSoundAddressData;
  TSoundChannels = array [TChannelRange] of TSoundSources;

const
  CHANNELS : TSoundChannels =
    (
      ( // CHANNEL_1
        (Address : $0; Data : $01), // NF1
        (Address : $0; Data : $02), // NF2
        (Address : $0; Data : $04) // NF3
      ),
      ( // CHANNEL_2
        (Address : $0; Data : $08),
        (Address : $0; Data : $10),
        (Address : $0; Data : $20)
      ),
      ( // CHANNEL_3
        (Address : $0; Data : $40),
        (Address : $0; Data : $80),
        (Address : $1; Data : $01)
      ),
      ( // CHANNEL_4
        (Address : $1; Data : $02),
        (Address : $1; Data : $04),
        (Address : $1; Data : $08)
      ),
      ( // CHANNEL_5
        (Address : $1; Data : $10),
        (Address : $1; Data : $20),
        (Address : $1; Data : $40)
      ),
      ( // CHANNEL_6
        (Address : $1; Data : $80),
        (Address : $2; Data : $01),
        (Address : $2; Data : $02)
      ),
      ( // CHANNEL_7
        (Address : $2; Data : $04),
        (Address : $2; Data : $08),
        (Address : $2; Data : $10)
      ),
      ( // CHANNEL_8
        (Address : $2; Data : $20),
        (Address : $2; Data : $40),
        (Address : $2; Data : $80)
      )
    );
Jetzt muss ich nur noch rausfinden, wie ich den Formatter so einstelle, dass er mir die Einrückungen nicht mehr wegmacht.

Union 1. Jun 2015 15:33

AW: Konstanten-Deklaration eines mehrdimensionalen Arrays
 
Zeilenumbrüche des Benutzers beibehalten -> True
Zeilenumbrüche in Array-Initialisierung -> Wie vorhanden

TiGü 1. Jun 2015 16:06

AW: Konstanten-Deklaration eines mehrdimensionalen Arrays
 
Schade, leider reichen diese beiden Optionen anscheinend nicht.
Mein XE7 rückt alles liebevoll auf eine Spalte.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:40 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