Enumerator, Problem mit Syntax, o.ä.
-
Hallo! :xmas1:
Hab folgende Code in einer Header "Woman.h"
enum EWomanCommands { Idle, GutRabbit };und in einer anderen Header "Hunter.h"
enum EHunterCommands { Idle, Hunting };und bekomme dadurch den Fehler: "Error 5 error C2365: 'Idle' : redefinition; previous definition was 'enumerator'"
dann hab ich gedacht: nagut, entferne ich Idle aus EHunterCommands und EWomanCommands und mache noch ein
enum EGeneralCommands { Idle };Pustekuchen, denn dann bekomm ich aber den Fehler: "Error 6 error C2440: 'initializing' : cannot convert from 'EGeneralCommands' to 'EWomanCommands'" wenn ich Idle mal zuweisen will.
Die Idee die ich hab sollte einleuchten, aber wie löse ich das vernünftig?
Danke!
-
namespace drum machen. Oder du steckst die Befehle gleich in die Klasse, das dürfte sogar sinnvoller sein:
class Hunter { public: enum HunterCommand { IDLE, }; // .. };
-
enum EGeneralCommands { Idle }; enum EHunterCommands { Hunting }; enum EWomanCommands { GutRabbit }; int main() { EWomanCommands a((EWomanCommands)Idle);//Wird aber nicht das Gewünschte Ergebnis bringen, denk ich }Oder, wie unser Keks schon erklärt hat: :xmas1:
namespace Hunter { enum EHunterCommands { Idle, Hunting }; } namespace Woman { enum EWomanCommands { Idle, GutRabbit }; } int main() { Woman::EWomanCommands a(Woman::Idle); }Was aber im Endeffekt nichts anderes (aber etwas schöneres) ist als
enum EHunterCommands { Idle_H, Hunting }; enum EWomanCommands { Idle_W, GutRabbit }; int main() { EWomanCommands a(Idle_W); }Übrigens faulenzen die beiden bestimmt sehr unterschiedlich
:xmas1:
-
Habe es in die Klasse gesteckt.
Danke! :xmas1:
-
Hmmm, aber so ganz gefällt mir das dann doch nicht, weil ich dann ja immer Hunter::Idle und Woman::Idle schreiben muss statt Idle...
-
JJ_ schrieb:
Hmmm, aber so ganz gefällt mir das dann doch nicht, weil ich dann ja immer Hunter::Idle und Woman::Idle schreiben muss statt Idle...
Zeig erstmal dein "Problem", also WAS du machen willst und nicht WIE. Vermutlich wären Klassen die beste Lösung - eine abstrakte Basisklasse EGeneral und dann zwei weitere, abgeleitete EHunter und EWoman. Dazu könntest du auch nur ein Enum machen:
enum ECommands { Idle, Hunt, Gut_da_Rabbit };Oder GLEICH die Funktionen in die Klassen implementieren.