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.


Anmelden zum Antworten