Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - konstante Mengentypen durch Addition definieren
cuejo - Mi 10.01.07 17:10
Titel: konstante Mengentypen durch Addition definieren
Hi,
kurze Frage: ist sowas wie das in Zeile 5 irgendwie möglich?
Delphi-Quelltext
1: 2: 3: 4: 5:
| const Punkt: set of char = ['*','/']; Strich: set of char = ['+','-']; Klammer: set of char = ['(',')']; Operatoren: set of char = Punkt + Strich; |
Delphi verlangt hier einen Konstantenausdruck. Wie kann man sowas am geschicktesten definieren?
jaenicke - Mi 10.01.07 17:41
Hmm, anscheinend kann der Compiler das nicht direkt auswerten. Denn konstante Werte werden ja vom Compiler direkt ausgewertet und fest in den Code gesetzt. Diese Verknüpfung mit + kann der Compiler eben nicht bereits auswerten.
Denn damit es geht müsste der dadraus ja automatisch gleich beim Kompilieren das machen:
Delphi-Quelltext
1: 2: 3: 4: 5:
| const Punkt: set of char = ['*','/']; Strich: set of char = ['+','-']; Klammer: set of char = ['(',')']; Operatoren: set of char = ['*','/','+','-']; |
Wie es gehen müsste:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| var Form1: TForm1; Operatoren: set of char;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject); begin Operatoren := Punkt + Strich; |
cuejo - Mi 10.01.07 18:46
Delphi-Quelltext
1: 2: 3: 4: 5:
| const Punkt = ['*','/']; Strich = ['+','-']; Klammer = ['(',')']; Operatoren = (Punkt + Strich); |
Was soll das? Warum wird das hier kompiliert und das andere nicht? Wer soll denn darauf kommen? Ich hab jetzt eine Stunde herumprobiert :autsch: :motz: :evil:
Hat jemand eine Erklärung dafür?
BenBE - Mi 10.01.07 18:52
Eigentlich ganz einfach ...
Delphi-Quelltext
1: 2:
| const A: Set of Char = ['a', 'b']; |
definiert eine Schreibbare Konstante, die vom Compiler nicht als Konstantenausdruck anerkannt wird ...
cuejo - Mi 10.01.07 19:00
BenBE hat folgendes geschrieben: |
Eigentlich ganz einfach ...
|
Einfach? Ja, schon... aber nur wenn man es weiß! :roll:
Danke für eure Hilfe. Delphi macht mich irgendwann noch mal fertig. Naja, ich geh dann mal 'ne Runde heulen... :lol:
BenBE - Mi 10.01.07 19:22
cuejo hat folgendes geschrieben: |
BenBE hat folgendes geschrieben: | Eigentlich ganz einfach ...
|
Einfach? Ja, schon... aber nur wenn man es weiß! :roll:
Danke für eure Hilfe. Delphi macht mich irgendwann noch mal fertig. Naja, ich geh dann mal 'ne Runde heulen... :lol: |
Sagen wir's mal so: Wenn man die DOH mal durch zufall gründlich liest, stößt man früher oder später auf zwei Bemerkungen:
1. Konstanten, die über eine Typangabe deklariert werden sind schreibbare Konstanten, die zur Laufzeit geändert werden können
2. Eine Konstante kann nur mit einem Wert initialisiert werden, der zur Compile Time eindeutig berechnet werden kann.
Kombiniert man beide Aussage erhält man, dass die Angabe der Set-Of-Deklaration nicht geht, weil Delphi den Ausdruck nicht während des Compilierens berechnen kann.
Dhaer einfach ... Man brauch nur lesen *g*
Ich geb aber zu: Die beiden genannten Aussagen sind wirklich in der DOH versteckt ...
cuejo - Mi 10.01.07 21:48
BenBE hat folgendes geschrieben: |
Konstanten, die über eine Typangabe deklariert werden sind schreibbare Konstanten, die zur Laufzeit geändert werden können
|
Schreibbare Konstanten, die zur Laufzeit geändert werden können? Davon habe ich noch nie gehört. Ich dachte Konstanten heißen so weil sie konstant sind und eben nicht geändert werden können. Wenn ich Werte verändern will dann nehme ich doch Variablen. Oder habe ich mal wieder etwas falsch verstanden?
BenBE - Mi 10.01.07 21:59
cuejo hat folgendes geschrieben: |
BenBE hat folgendes geschrieben: |
Konstanten, die über eine Typangabe deklariert werden sind schreibbare Konstanten, die zur Laufzeit geändert werden können
|
Schreibbare Konstanten, die zur Laufzeit geändert werden können? Davon habe ich noch nie gehört. Ich dachte Konstanten heißen so weil sie konstant sind und eben nicht geändert werden können. Wenn ich Werte verändern will dann nehme ich doch Variablen. Oder habe ich mal wieder etwas falsch verstanden? |
Ich empfehle an dieser Stelle einmal die DOH ;-) Dort steht das genauer drin ...
Schreibbare Konstanten haben aber einen ganz sinnvollen Einsatz-Zweck: Man kann damit initialisierte lokale Variablen emulieren (kann Delphi nämlich nicht). Für genauere Ausführungen sei an dieser Stelle aber auf die Object Pascal Reference verwiesen, die Teil der DOH ist ...
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!