Fehler bei enum als Datentyp in Klasse
-
Einen schönen guten Hallo,
ich brauche mal wieder eure Hilfe, da sich irgendwo ein Fehler versteckt, den ich einfach nicht finde.
Es geht dabei um folgendes:
Ich habe in einem Header ein enum und möchte das in einer Klasse in dem selben Header als Datentyp verwenden. Beim kompilieren wird mir aber immer gesagt, dass es den entsprechenden Datentyp nicht gibt.
Dieses enum wird auch in anderen Klassen als Datentyp verwendet und sie können es ebenfalls nicht finden.Der Code wurde 1:1 aus einem Matheparser-Tutorial übernommen.
Hier nun der (reduzierte) Code des Headers:
#ifndef TOKEN_H #define TOKEN_H #include <string> using namespace std; enum TokenType { TT_PLUS, // + TT_MINUS, // - [...] }; static const char *TokenTypeStr[] = { "TT_PLUS", "TT_MINUS", [...] }; class Token { private: TokenType myType; //Fehler: Syntaxfehler: Fehlendes ';' vor //Bezeichner 'myType' double myValue; string myStrValue; public: Token(TokenType type = TT_NIL, double value = 0, const string& strValue = ""); TokenType getType() const { return myType; } [...] }; #endif /* TOKEN_H */Ich habe den Code der Übersicht halber etwas gekürzt, daher die "[...]".
Findet ihr den Fehler oder könnt mir sagen woran es liegt, dass TokenType nicht als Datentyp zugelassen wird?
Wenn ich das enum innerhalb der Klasse defniere, gibt es das Problem zwar nicht, aber es greifen wie gesagt noch weitere Klassen darauf zu.Viele Grüße
Cherup
-
Dann ist der Fehler wohl im [...]
-
Hi,
danke für die schnelle Antwort.
Daher hier nochmal der nicht reduzierte Code:
#ifndef TOKEN_H #define TOKEN_H #include <string> using namespace std; enum TokenType { TT_PLUS, // + TT_MINUS, // - TT_MUL, // * TT_DIV, // / TT_POW, // ^ TT_COMMA, // , TT_LPAREN, // ( TT_RPAREN, // ) TT_LSQBRACKET, // [ TT_RSQBRACKET, // ] TT_NUMBER, // 12345 TT_IDENT, // sin TT_VAR, // Variable TT_NIL }; static const char *TokenTypeStr[] = { "TT_PLUS", "TT_MINUS", "TT_MUL", "TT_DIV", "TT_POW", "TT_COMMA", "TT_LPAREN", "TT_RPAREN", "TT_LSQBRACKET", "TT_RSQBRACKET", "TT_NUMBER", "TT_IDENT", "TT_VAR", "TT_NIL" }; class Token { private: TokenType myType; double myValue; string myStrValue; public: Token(TokenType type = TT_NIL, double value = 0, const string& strValue = ""); TokenType getType() const { return myType; } double getValue() const { return myValue; } const string& getStrValue() const { return myStrValue; } const char *toString() const { return TokenTypeStr[myType]; } bool equal(TokenType type) const { return myType == type; } }; #endif /* TOKEN_H */Ich habe nur um einige enum-Werte und wenige Funktionen gekürzt.
Viele Grüße
Cherup
-
Baue ein übersetzbares Beispiel. Einen Header kann man nicht übersetzen. Packt man das Ganze in eine cpp funktioniert es.
-
Hi,
das ist gut zu wissen, dass es als cpp funktioniert, nur hilft mir das bei meinem Problem nicht wirklich weiter.
In der cpp zu dem Header befindet sich lediglich der Kontruktor, der die Werte zuweist.
Ich habe nur den Header gepostet, weil ich gehofft hatte, das sich da der Fehler versteckt und ich ihn nur nicht sehe.
Ich werde dann mal sehen, ob ich das Tutorial übersetzen kann, es soll ja lauffähig sein.
Falls das klappt versteckt sich der Fehler wohl irgendwo anders...Viele Grüße
Cherup
-
Cherup schrieb:
das ist gut zu wissen, dass es als cpp funktioniert, nur hilft mir das bei meinem Problem nicht wirklich weiter.
Doch, du weißt dass der Fehler woanders ist.
Deine Meldung kommt häufig, wenn man irgendwo ein Semikolon vergessen hat (beliebte Stelle ist hinter einer Klassendefinition).