Autor |
Beitrag |
cuejo
      
Beiträge: 142
Win XP
Delphi 7 Personal und 2005 PE
|
Verfasst: Mi 10.01.07 17:10
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?
_________________ Computer sind dumm, aber fleißig. Deshalb arbeite ich so gerne damit.
|
|
jaenicke
      
Beiträge: 19313
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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 
      
Beiträge: 142
Win XP
Delphi 7 Personal und 2005 PE
|
Verfasst: Mi 10.01.07 18:46
_________________ Computer sind dumm, aber fleißig. Deshalb arbeite ich so gerne damit.
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: 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 ...
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
cuejo 
      
Beiträge: 142
Win XP
Delphi 7 Personal und 2005 PE
|
Verfasst: Mi 10.01.07 19:00
BenBE hat folgendes geschrieben: | Eigentlich ganz einfach ...
|
Einfach? Ja, schon... aber nur wenn man es weiß!
Danke für eure Hilfe. Delphi macht mich irgendwann noch mal fertig. Naja, ich geh dann mal 'ne Runde heulen... 
_________________ Computer sind dumm, aber fleißig. Deshalb arbeite ich so gerne damit.
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: 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ß!
Danke für eure Hilfe. Delphi macht mich irgendwann noch mal fertig. Naja, ich geh dann mal 'ne Runde heulen...  |
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 ...
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
cuejo 
      
Beiträge: 142
Win XP
Delphi 7 Personal und 2005 PE
|
Verfasst: 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?
_________________ Computer sind dumm, aber fleißig. Deshalb arbeite ich so gerne damit.
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: 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 ...
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
|