enum als Funktionsparameter
-
Hallo,
ist es nicht möglich, einen enum Typ als Funktionsparameter zu übergeben oder stelle ich mich nur zu blöd an?
in der cpp:
enum Frametype { ftUnknown = -2, ftError = -1, ftData = 0, ftOpen = 1, ftClose = 2, }; enum Action{ acSend, acWrite, };im Header:
bool legalTransition(const Action ac, const Frametype receivedFt);führ zu folgendem Fehler:
error C4430: missing type specifier - int assumed. Note: C++ does not support default-intund zwar gleich zweimal hintereinander, für jedes enum einen!
wo ist der Fehler versteckt?
danke wurfholz
-
Klar kannst du enum's als Parameter angeben, aber dafür muß der Compiler sie erstmal kennen - solange er die Definition 'enum Frametype{...};' nicht gesehen hat, hält er den Bezeichner Frametype für einen Variablen- (in deinem Fall Parameter-) Namen.
(Die Lösung in Kurzform: Pack die beiden enum-Definitionen mit in den Header, wenn du sie dort benötigst)
-
Ok, es wird zeit fürs wochenende:
das hab ich natürlich vorher schon versucht, allerding nur mit dem enum
"Frametype". Da hatte ich noch nicht realisiert, dass ich zweimal den gleichen Fehler bekomme und dachte folglich, dass es nichts nützt."i was blind but now i see!"
danke dir
-
Ich kann mich tauschen, aber ich glaub dein problem ist die deklaration, "const" variablen koennen nur referenzen sein, du uebergibst eine const kopie, das ist kaese
bool legalTransition(const Action ac, const Frametype receivedFt); // aendern zu bool legalTransition(const Action& ac, const Frametype& receivedFt);
-
Mr Evil schrieb:
Ich kann mich tauschen, aber ich glaub dein problem ist die deklaration, "const" variablen koennen nur referenzen sein, du uebergibst eine const kopie, das ist kaese
Nö, der Standard erlaubt das.
-
ok, dann hab ich nichts gesagt #gg
{aber was bringt das ? eine konstante kopie? das is doch quark}
-
Es bringt garnix. Genausowenig wie das was bringt:
void sepp() {} void humpf() { return sepp(); }Ist aber auch erlaubt. Nennt sich "void returns".
Erleichtert einem das Leben wenn man mit Templates rummacht.