Hallo,
ich habe ein verständisproblem zu enums und hoffe, dass ihr mir dabei
helfen könnt.
Ich definiere in einer Klasse mit dem Namen 'day' z.B. zwei Enums:
1
enum days{ monday=0,
2
tuesday,
3
wednesday
4
thursday,
5
friday,
6
saturday,
7
sunday}
8
9
enum time{ morning=0,
10
midday,
11
afternoon,
12
night,
13
midnight}
In meiner main-function definiere ich ein Objekt, welches somit diese
beiden enums kennt.
aber wie kann ich jetzt die einzelnen inhalte abfragen?
ich würde gerne folgendes machen (dazu habe ich mir zwei variablen
erstellt (tag, zeit)
Enums sind keine Klassen, daher ist der ::-Oberator nicht korrekt.
Es sei denn, Deine enums gehören zu einer Klassendeklaration:
1
classbla
2
{
3
public:
4
enumdays{monday=0,
5
tuesday,
6
wednesday
7
thursday,
8
friday,
9
saturday,
10
sunday};
11
12
enumtime{morning=0,
13
midday,
14
afternoon,
15
night,
16
midnight};
17
18
etc....
19
20
}
Dann wird der ::-Operator verwendet, aber nicht mit dem Namen des
jeweiligen enums, sondern mit dem der Klasse, in deren Namensraum der
enum deklariert wurde.
Im Beispiel also
Marcell schrieb:> ich würde gerne folgendes machen
[...]
> komme da aber absolut nicht weiter.
Was meinst du damit? Wenn du das gerne so machen würdest, dann mach es
doch einfach so. Sieht alles korrekt aus.
Dass
days tag2 = monday;
bzw.
Foo::days tag2 = Foo::monday;
auch funktionieren würde, ist eher ein Nachteil von enums, besonders von
globalen. Darum setzt man sie (also globale enums) oft in eigene
Sub-Namespaces. Mit "enum class" ist das allerdings nicht mehr nötig.
> In meiner main-function definiere ich ein Objekt, welches somit diese> beiden enums kennt.
In diesem Sinn kennt die Klasse die Enums. Also
DeineKlasse::time::morning oder DeineKlasse::morning, nicht
DeinObjekt.time::morning oder wie auch immer du es probiert hast.
> Marcell schrieb:> [...]> Sieht alles korrekt aus.
Die bedingte Verzweigung mag korrekt ausschauen, wäre aber
handwerklicher Pfusch.
Erstmal würde sich hier bei einem enum eine switch-case Abfrage
anbieten.
Die würde es schon mal etwas leserlicher machen. Das eigentliche Problem
bestünde aber weiterhin:
7 * 5 = 35 mögliche Ergebnisse = sehr viel, sehr unschöner Code.
Und Morgen kommt jemand und möchte genaue Urzeiten für 'time' definieren
oder weitere hinzufügen. Dann hätte man schnell 400+x Zeilen mit
Abfragen und inkludierten Code; und mit Sicherheit ebenso doppelten.
Soetwas möchte man nicht der Nachwelt hinterlassen.
ber lösbar z.B. mit einem Zustandsautomaten nach Fowler et al.