Autor Beitrag
cuejo
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 142

Win XP
Delphi 7 Personal und 2005 PE
BeitragVerfasst: Mi 10.01.07 17:10 
Hi,
kurze Frage: ist sowas wie das in Zeile 5 irgendwie möglich?

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19313
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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:
ausblenden 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:
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 142

Win XP
Delphi 7 Personal und 2005 PE
BeitragVerfasst: Mi 10.01.07 18:46 
ausblenden 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?

_________________
Computer sind dumm, aber fleißig. Deshalb arbeite ich so gerne damit.
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Mi 10.01.07 18:52 
Eigentlich ganz einfach ...

ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 142

Win XP
Delphi 7 Personal und 2005 PE
BeitragVerfasst: Mi 10.01.07 19:00 
user profile iconBenBE 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:

_________________
Computer sind dumm, aber fleißig. Deshalb arbeite ich so gerne damit.
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Mi 10.01.07 19:22 
user profile iconcuejo hat folgendes geschrieben:
user profile iconBenBE 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 ...

_________________
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 142

Win XP
Delphi 7 Personal und 2005 PE
BeitragVerfasst: Mi 10.01.07 21:48 
user profile iconBenBE 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Mi 10.01.07 21:59 
user profile iconcuejo hat folgendes geschrieben:
user profile iconBenBE 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.