Enum in Classen übergeben
-
Hallo,
ich habe ein riesen Problem. Ich will enums an Klassen übergeben und sie dort verarbeite. Aber ich weiss nicht wie. Könnt Ihr mir da helfen? Hier mal der Quellcode, den ich bisher habe.
in der Test.h
enum test {Grid = 0, Field = 1}; void popupmenufind(test);
und in der Test.cpp
void TFTest::popupmenufind(test) { switch (test) / funktioniert nicht { case Field: /funktioniert nicht }
Wäre froh, wenn mir da einer helfen könnte.
Gruss,
MTO<edit>Bitte Code-Tags benutzen!</edit>
[ Dieser Beitrag wurde am 15.04.2003 um 09:30 Uhr von junix editiert. ]
-
Es gibt 2 Möglichkeiten:
- Enum ist immer vom typ int (meines Wissens)
- Die elegantere Lösung ist, eine typedef zu machen:
Zum Beispiel:
typedef enum { Black = 0, Green, Orange, ColorsCount }TColors;
Nun kannst du überall Übergabewerte des typs "TColors" verwenden. Das schöne ist, dass du dann wirklich nur Black, Orange, Green oder ColorsCount übergeben kannst. Alles andere ist ungültig.
-junix
-
Danke für die schnelle Antwort. Der bringt allerdings immer noch Fehler. Mein Quellcode sieht jetzt so aus:
test.h
typedef enum { Grid = 0, Field = 1, }Test; void popupmenufind(Test);
test.cpp
void TFTest::popupmenufind(Test) { switch (Test) {
Bei dem Ausdruck "switch (Test)" bringt er den Fehler:
[C++ Fehler] test.cpp(176): E2108 Ungültige Verwendung von typedef 'TFTest::Test'
Was kann ich da machen?
<edit>Bitte Code-Tags benutzen (zum 2. Mal!)</edit>
[ Dieser Beitrag wurde am 15.04.2003 um 09:43 Uhr von junix editiert. ]
-
Original erstellt von mto:
**void popupmenufind(Test);
**
Das kanns ja nicht sein oder?
-junix
-
Ok, danke habs gelöst. Der Quelltext sieht jetzt so aus:
test.h typedef enum { Grid = 0, Field = 1, }Test; void popupmenufind(Test te); test.cpp void TFTest::popupmenufind(Test te = Field) { switch (te) { case 0: { ShowMessage("Test"); } } }
<edit>Bitte Code-Tags verwenden!!</edit>
[ Dieser Beitrag wurde am 15.04.2003 um 10:02 Uhr von junix editiert. ]
-
Bestens. Etwas kleines noch: Standard-Initialisierungen macht man immer im header.
Ausserdem: liest du eigentlich meine Kommentare in deinen Posts nicht? Code-Tags verwenden.
-junix
-
Sorry, habe ich überlesen. Mach ich ab sofort so