![]() |
Delphi-Version: 12 Athens
Konstantes Array of Record deklarieren
Ich stehe gerade auf dem Schlauch.
Ich will ein dynamisches Array von Records als Konstante deklarieren. Eigentlich dachte ich, das geht so:
Delphi-Quellcode:
Aber der Compiler in Delphi 12 ist anderer Meinung:
type
TKameraTypRec = record Name: string; Breite: Integer; Hoehe: Integer; PixelSizeX: Extended; PixelSizeY: Extended; end; TKameraTypArr = array of TKameraTypRec; const CAM_TYPES: TKameraTypArr = ( (Name: 'GT1920'; // <== Compilefehler hier Breite: 1920; Hoehe: 1080; PixelSizeX: 0.00000586; PixelSizeY: 0.00000586) );
Code:
Erst, wenn ich explizit eine Array-Länge setze, funktioniert es:
[dcc32 Error] wf_Kamera.pas(84): E2003 Undeclared identifier: 'Name'
Delphi-Quellcode:
Ich dachte, das war eine der Neuerungen in einer der letzten Delphi-Versionen, dass man bei Array-Konstanten keine Länge mehr angeben muss???
type
TKameraTypArr = array[0..0] of TKameraTypRec; const CAM_TYPES: TKameraTypArr = ( (Name: 'GT1920'; Breite: 1920; Hoehe: 1080; PixelSizeX: 0.00000586; PixelSizeY: 0.00000586) ); :gruebel: |
AW: Konstantes Array of Record deklarieren
So sollte es gehen:
Delphi-Quellcode:
const
CAM_TYPES_0: TKameraTypRec = (Name: 'GT1920'; // <== Compilefehler hier Breite: 1920; Hoehe: 1080; PixelSizeX: 0.00000586; PixelSizeY: 0.00000586 ); const CAM_TYPES: TKameraTypArr = [CAM_TYPES_0]; |
AW: Konstantes Array of Record deklarieren
Typisierte Konstanten sind IMMER "schreibgeschützte" Variaben.
Bei Strings, geht die Referenzzählung auf -1, für Konstanten ... bei Arrays klappt hier die Deklaration meistens nicht, für dynamische Arrays. Wenn das NEUE, was der Vorgänger zeigt, klappt, dann hast du Glück. Man kann hier zwar auch tricksen, aber du willst bestimmt nicht böse Casten und als Dummy die Arraystrucktur selbst zusammenklöppeln? |
AW: Konstantes Array of Record deklarieren
Hmm, Name wird fett dargestellt, ist das evtl. ein reserviertes Wort?
|
AW: Konstantes Array of Record deklarieren
Ja/Nein.
Das Highlighting im Forum arbeitet auch etwas anders, als das in der Delphi-IDE und selbst das Highlighting in der IDE ist nicht immer korrekt. |
AW: Konstantes Array of Record deklarieren
Zitat:
Delphi-Quellcode:
mal als statischen Array-Typ. Dann klappt das auch:
TKameraTypRec
Delphi-Quellcode:
Selbst falls du es kompiliert bekommen hättest, hätte der Compiler ja spätestens bei den runden Klammern (
//TKameraTypArr = array of TKameraTypRec;
TKameraTypArr = array [0..0] of TKameraTypRec;
Delphi-Quellcode:
) gemeckert, weil diese nur für statische Array-Konstanten zulässig sind. Du hättest eckige Klammern (
(...)
Delphi-Quellcode:
) verwenden müssen. Dass das mit dynamischen Array-Konstanten so nicht klappt hat leider mit dem Fakt zu tun, dass diese intern ganz anders gespeichert werden als statische Array-Konstanten. Es sind eigentlich nur Konstante Zeiger auf eine anonyme dynamische Array-Variable. Du kannst die Beschränkung mit Inline-Variablen umgehen, dann sollte es funktionieren, aber würde den Ramen sprengen.
[...]
Zitat:
Delphi-Quellcode:
const
A: TArray<Char> = ['H', 'E', 'L', 'L', 'O']; begin Writeln(A[0] + A[1] + A[2] + A[3] + A[4]); // >>HELLO A[0] := 'W'; A[1] := 'O'; A[2] := 'R'; A[3] := 'L'; A[4] := 'D'; Writeln(A[0] + A[1] + A[2] + A[3] + A[4]); // >>WORLD end. Zitat:
Delphi-Quellcode:
mit dem Feld
Name
Delphi-Quellcode:
versuchen und wirst merken, dass es genauso wenig funktioniert.
Breite
Zitat:
Delphi-Quellcode:
, aus irgendeinem mir nicht erklärlichen Grund wird dort (und zwar nur dort) der Begriff
property add
Delphi-Quellcode:
hervorgehoben... :-D
add
|
AW: Konstantes Array of Record deklarieren
Zitat:
![]() |
AW: Konstantes Array of Record deklarieren
Hallo,
ich verstehe noch nicht, wieso das überhaupt gehen sollte. Für mich ist "konstant" und "dynamisch" ein Widerspruch. Wenn es eine Konstante sein soll, dann kann man doch auch ein festes Arry machen - oder nicht? |
AW: Konstantes Array of Record deklarieren
OK, sagen wir es so
Es sind IMMER Konstanten, wo der Compiler versucht da einen Schreibschutz draufzulegen. * es gibt Sonderfälle und Bugs, * und via Pointerrumgefummel kann man das auch umgehen Besonders geil ist es, wenn man ausversehn die Konstante ![]() (z.B. DevExpress-Grids zeigen dann in NULL-Spalten plözlich etwas an) |
AW: Konstantes Array of Record deklarieren
Zitat:
Für einfache Datentypen (z.B. array of integer) geht das ja, nur eben nicht mit einem array of Record. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:09 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