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 KlasseDies 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)