![]() |
Aufzählungstyp aus Operatoren
Hallo Liebe Delphi-Freunde,
Ich bin recht neu in Delphi und habe eine Frage. Ich muss einen Aufzählungstyp definieren, der nur aus Operatoren besteht(+,-,/,*). Dazu habe ich Folgendes probiert: type TFrmSettings = class(TForm) GroupBox2: TGroupBox; BitBtn1: TBitBtn; BitBtn2: TBitBtn; SpnEdtTaskNumber: TSpinEdit; RdGrpOperator: TRadioGroup; type TOperator= ('+','-','*','/'); Ich habe es auch ohne Anführungzeichen probiert. Leider bekomme ich die Fehlermeldung [DCC Fehler] UParameters.pas(24): E2029 Bezeichner erwartet, aber String-Konstante gefunden Gibt es vielleicht einen eigenen Typen für Operatoren? Oder habe ich was grundsätzliches Falsch gemacht? Vielen Dank für eure Hilfe |
AW: Aufzählungstyp aus Operatoren
Wenn Du keine Stringvergleiche anstellen willst, kannst Du es so versuchen:
Delphi-Quellcode:
Kommen doch String- bzw. Zeichenvergleiche ins Spiel, könnte man sich z.B. so behelfen:
type
TOperator = (opPlus, opMinus, opMultiply, opDivide);
Delphi-Quellcode:
[edit] P.S.: Sorry, Willkommen in der DP :dp: [/edit]
const
OPCHARS: array[TOperator] of char = ('+', '-', '*', '/'); |
AW: Aufzählungstyp aus Operatoren
Danke für die schnelle Antwort DeddyH und freue mich Teil der Community zu sein!
Die Operatoren benötige ich für eine Funktion, die einen Operator zum Rechnen auswählt: // gibt die Einstellung fuer den Operator zurueck function TFrmSettings.getOperator:TOperator; begin getOperator:= RdGrpOperator.ItemIndex end; Bei deinem ersten Vorschlag erhalte ich dann jedoch bei dieser Funktion den Fehler, den ich auch nachvollziehen kann: [DCC Fehler] UParameters.pas(87): E2010 Inkompatible Typen: 'TFrmSettings.TOperator' und 'Integer' Hast du/ihr eine Idee wie es anders gehen könnte? DieFunktion muss vom Typ TOperator sein, wobei nicht näher beschrieben ist, was TOperator beinhalte muss, logisch wäre jedoch nur Operatoren. Da ItemIndex jedoch Zahlen zurückgibt kann das ja eigentlich nicht gehen.. Nochmals Vielen Dank |
AW: Aufzählungstyp aus Operatoren
Da die Indizes nicht selbst vergeben wurden, hat opPlus den Index 0, opMinus Index 1 etc. Stehen also Deine Radiobuttons (anhand der Bezeichner denke ich, um solche handelt es sich) in exakt der Reihenfolge, wie sie in der Enumeration deklariert wurden, könntest Du einfach einen harten Cast anwenden.
Delphi-Quellcode:
Ich hoffe, ich habe jetzt keinen Denkfehler gemacht, aber das sollte eigentlich funktionieren.
getOperator:= TOperator(RdGrpOperator.ItemIndex);
[edit] Zur Not kann man das aber auch als "Übersetzungsfunktion" realisieren:
Delphi-Quellcode:
[/edit]
case RdGrpOperator.ItemIndex of
0: Result := opPlus; 1: Result := opMinus; 2: Result := opMultiply; 3: Result := opDivide; else raise Exception.Create('Ungültiger Operator'); end; |
AW: Aufzählungstyp aus Operatoren
Danke das hat geklappt!
Eine Frage dazu habe ich noch. Was genau steckt hinter opMultiply, opMinus, etc. ? Wieso geht das so aber nicht mit den eigentlichen Zeichen? |
AW: Aufzählungstyp aus Operatoren
Die eigentlichen Zeichen sind ja bereits Operatoren und somit nicht als Bezeichner zugelassen, das ist im Prinzip der ganze Grund.
[edit] Außerdem habe ich vergessen zu erwähnen: Ein Bezeichner muss mit einem Buchstaben oder dem Unterstrich (_) beginnen. Von daher scheiden die Operatoren automatisch aus. [/edit] |
AW: Aufzählungstyp aus Operatoren
Zitat:
[ delphi ]...[ /delphi ] (ohne Leerzeichen) ->
Delphi-Quellcode:
procedure Test;
begin WriteLn('Hallo Welt'); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:08 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