Klassen und Header 'class'-Typ-Neudefinition



  • Hallo zusammen,
    bisher habe ich nur in plain-C programmiert und nun folgendes Problem in C++

    ich möchte mit der irrlicht-engine ein wenig spielen. Dazu habe ich ein kleines Programm folgendermassen aufgebaut

    main.cpp <-- Hier soll der Grund-Ablauf stehen
    main.hpp <-- Hier wird irrlicht.h eingebunden, namespace irr gesetzt usw.
    MyEventReceiver.cpp <-- Eine Klasse, die Tastatureingaben abfängt
    MyEventReceiver.hpp <-- die Deklaration der Klasse

    Dies alles ist recht einfach gehalten:

    MyEventReceiver.hpp :

    #include "main.hpp"
    class MyEventReceiver : public IEventReceiver
    {
    public:
    	virtual bool OnEvent(SEvent event);
    };
    

    MyEventReceiver.cpp :

    #include "MyEventReceiver.hpp"
    class MyEventReceiver : public IEventReceiver
    {
    public:
       virtual bool OnEvent(SEvent event)
       {
          if(event.EventType == EET_KEY_INPUT_EVENT)
          {
            ... usw...
          }
          return false;
       }  
    };
    

    main.hpp :

    #include <irrlicht.h>	// Irrlicht-Header einfügen
    using namespace irr;	// Namensbereiche festlegen
    /*...usw ...*/
    

    main.cpp :

    #include "main.hpp"		// Header zu dieser Datei einfügen
    #include "MyEventReceiver.hpp
         /* ...usw ... */
    
    int main(void)
    {
       laufvariable = DUMMY;		//Laufvariable zur Ablaufsteuerung
       MyEventReceiver receiver;        // Objekt anlegen 
       InitEngine();
    
       while(device->run() && driver)
       {
          /* ... usw ... */
       }
       return 0;
    }
    

    Die Variablen, Funktionen usw. gibt es natürlich, das wäre nur hier zuviel Code geworden. Es kommen wirklich nur diese zwei Fehler:

    myeventreceiver.cpp(2) : error C2011: 'MyEventReceiver' : 'class'-Typ-Neudefinition
    und
    main.cpp(20) : error C2065: 'receiver' : nichtdeklarierter Bezeichner
    ...wobei ich mir bei diesem Fehler denke:... wo keine Klasse, da auch kein Objekt...

    So, ich hoffe, ich alles relevante dabei. Wahrscheinlich ist da ein ganz grober Anfängerfehler drin, aber ich weiss mir nicht mehr zu helfen.
    Übrigens, wenn ich alles, so wie in den Irrlicht-Tutorials in eine einzige Datei werfe, funktioniert das Programm richtig. Aber genau diese Vorgehensweise hat ja wohl nichts mit Struktur, Kapselung und Modularisierung zu tun. Deshalb möchte ich das anders angehen.

    Kann mir von Euch da jemand mal den Kopf waschen ?
    Danke im voraus
    SimpleMind



  • Du kannst eine Klasse gerne mehrfach deklarieren ("class MyEventReciever;"), aber nur einmal wirklich definieren - in der MyEventReciever benötigst du nur noch die Methodendefinitionen der Klasse:

    #include "MyEventReciever.hpp"
    
    bool MyEventReciever::OnEvent(SEvent e)
    {
      ...
    }
    

    (die zweite Fehlermeldung dürfte dann ein Folgefehler sein)


Anmelden zum Antworten