Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Typendeklaration, Constanten und Belegung der Felder
trm - Mo 01.12.14 21:16
Titel: Typendeklaration, Constanten und Belegung der Felder
Huhu.
ich habe mal wieder eine eigenartige Knackwurst, die ich nicht durchbekomme.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| type THead = record A: String; B: Integer; C: Boolean; end;
type TFelder = record FA: String; FB: Byte; FC: Integer; FD: Boolean; end;
type TDBStruktur = record Head: THead; Felder: array of TFelder; end; |
Das ist die Typenzuweisung (und JA, es sind im Moment einfach nur TEST-Bezeichner).
Im Folgenden möchte ich die Felder als Constanten festlegen, der Kopf wird zur Laufzeit jedoch erst generiert.
Wenn ich nun versuche Felder[0] .. Felder[n] vorzubelegen, kommt immer wieder eine Fehlermeldung.
Delphi-Quelltext
1: 2:
| Const FeldNamen_version:TDBStruktur=( ??? ) ; |
Wie sieht so eine Zuweisung denn korrekt aus? Ist das überhaupt möglich, dass ein Teil eines Type-Records variabel und ein anderer Teil als Constante definiert/angesprochen wird?
LG Mathias
Stundenplan - Mo 01.12.14 21:37
Du könntest Zuweisbare typisierte Konstanten (Compilerswitch {$J+}) verwenden. Den Head könntest du mit Dummy-Daten in der Konstante deklarieren und zur Laufzeit neu zuweisen.
Sauberer wäre es sicher, das Felder-Array als Konstante zu haben und zur Laufzeit eine TDBStruktur mit den konstanten Feldern und dem frischen Head zu belegen.
trm - Mo 01.12.14 21:54
Danke, das hatte ich mir auch schon überlegt.
Mein Problem ist, dass der Compiler mir nicht erlaubt die Constanten zu definieren:
Delphi-Quelltext
1: 2: 3: 4: 5:
| [dcc32 Fehler] UnitConstanten.pas(36): E2029 ')' erwartet, aber String-Konstante gefunden
Const FeldNamen_version: array [0 .. 3] of TFelder = (('bibo2eintrag',1,1,True),(),(),()); |
Stundenplan - Mo 01.12.14 22:06
Du musst den Namen des Recordfeldes, das du belegen möchtest, dazu schreiben, in etwa so:
Delphi-Quelltext
1: 2: 3:
| Const FeldNamen_version: array [0 .. 3] of TFelder = ((FA: 'bibo2eintrag'; FB: 1; FC: 1; FD: True),(),(),()); |
trm - Mo 01.12.14 22:28
Stundenplan hat folgendes geschrieben : |
Du musst den Namen des Recordfeldes, das du belegen möchtest, dazu schreiben, in etwa so:
Delphi-Quelltext 1: 2: 3:
| Const FeldNamen_version: array [0 .. 3] of TFelder = ((FA: 'bibo2eintrag'; FB: 1; FC: 1; FD: True),(),(),()); | |
So ein Quatsch. Das habe ich noch nie gesehen.
Herzlichen Dank!
Xion - Mo 01.12.14 22:28
Normalerweise bin ich auch für schlanke Records, aber in diesem Fall: Wieso benutzt du keine Klasse? Dort kannst du im Constructor alles anlegen, wie du es möchtest. Wenn du dann alle properites nur als read definierst, dann sind sie auch konstant...mit der Option, später noch erweitert zu werden.
Der Sinn von Konstanten ist ja eigentlich nur, dass sie im Code gleich eincompiliert werden und daher etwas schneller sind (mal davon abgesehen, dass man ihnen nichts zuweisen kann, was mit der Klasse ja auch der Fall wäre).
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!