AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Aufzählungstyp aus Operatoren

Ein Thema von Mojito · begonnen am 29. Okt 2012 · letzter Beitrag vom 29. Okt 2012
Antwort Antwort
Mojito

Registriert seit: 29. Okt 2012
39 Beiträge
 
#1

Aufzählungstyp aus Operatoren

  Alt 29. Okt 2012, 11:26
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
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.534 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Aufzählungstyp aus Operatoren

  Alt 29. Okt 2012, 11:30
Wenn Du keine Stringvergleiche anstellen willst, kannst Du es so versuchen:
Delphi-Quellcode:
type
  TOperator = (opPlus, opMinus, opMultiply, opDivide);
Kommen doch String- bzw. Zeichenvergleiche ins Spiel, könnte man sich z.B. so behelfen:
Delphi-Quellcode:
const
  OPCHARS: array[TOperator] of char = ('+', '-', '*', '/');
[edit] P.S.: Sorry, Willkommen in der DP [/edit]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Mojito

Registriert seit: 29. Okt 2012
39 Beiträge
 
#3

AW: Aufzählungstyp aus Operatoren

  Alt 29. Okt 2012, 11:43
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

Geändert von Mojito (29. Okt 2012 um 11:48 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.534 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Aufzählungstyp aus Operatoren

  Alt 29. Okt 2012, 11:49
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.
getOperator:= TOperator(RdGrpOperator.ItemIndex); Ich hoffe, ich habe jetzt keinen Denkfehler gemacht, aber das sollte eigentlich funktionieren.

[edit] Zur Not kann man das aber auch als "Übersetzungsfunktion" realisieren:
Delphi-Quellcode:
case RdGrpOperator.ItemIndex of
  0:
    Result := opPlus;
  1:
    Result := opMinus;
  2:
    Result := opMultiply;
  3:
    Result := opDivide;
  else
    raise Exception.Create('Ungültiger Operator');
end;
[/edit]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen

Geändert von DeddyH (29. Okt 2012 um 11:53 Uhr)
  Mit Zitat antworten Zitat
Mojito

Registriert seit: 29. Okt 2012
39 Beiträge
 
#5

AW: Aufzählungstyp aus Operatoren

  Alt 29. Okt 2012, 12:03
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?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.534 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Aufzählungstyp aus Operatoren

  Alt 29. Okt 2012, 13:06
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]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen

Geändert von DeddyH (29. Okt 2012 um 13:50 Uhr)
  Mit Zitat antworten Zitat
nuclearping

Registriert seit: 7. Jun 2008
708 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

AW: Aufzählungstyp aus Operatoren

  Alt 29. Okt 2012, 13:48
Danke das hat geklappt!
Was anderes: Wenn du Quellcode postest, verpacke diesen bitte in Delphi-Tags:

[ delphi ]...[ /delphi ] (ohne Leerzeichen)

->

Delphi-Quellcode:
procedure Test;
begin
  WriteLn('Hallo Welt');
end;
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:36 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz