Unklare CompilerFehlerMeldung
-
Hallo follgendes Problem
ich habe eine abstrakte Klasse State.h
Habe nur .h Datei angelegt.#ifndef STATE_H #define STATE_H #include "../impl/Automat.h" class State { protected: bool final; public: virtual ~State() =0; /** * Gibt 1 zurueck, wenn der Zustand ein * Endzustand ist, sonst 0. */ bool isFinal() { return final; } virtual void read(char c, Automat* m) = 0; }; #endif /* STATE_H */Dann habe ich viele UnterKlassen States von 0 bis 10.
Hier ist State0#ifndef STATE0_H_ #define STATE0_H_ #include "../../abstract/State.h" class State0 : public State { // FEHLER: expected class-name before '{' token public: State0(); virtual ~State0(); void read(char c, Automat* m); //FEHLER: ISO C++ forbids declaration of `m' with no type }; #endif /* STATE0_H_ */Dann habe ich noch eine Klasse Automat
Hier ist .h#ifndef AUTOMATIMPL_H_ #define AUTOMATIMPL_H_ #include "../abstract/State.h" #include "../impl/states/State0.h" #include "../impl/states/State1.h" #include "../impl/states/State2.h" #include "../impl/states/State3.h" #include "../impl/states/State4.h" #include "../impl/states/State5.h" #include "../impl/states/State6.h" #include "../impl/states/State7.h" #include "../impl/states/State8.h" #include "../impl/states/State9.h" #include "../impl/states/State10.h" class State; class Automat{ protected: /** Der aktuelle Zustand des Automats. */ State* currentState; /*enthaelt Zeiger auf alle 11 Zustaende*/ State* statePool; public: Automat(); virtual ~Automat(); /** * Liest und bearbeitet ein Zeichen. */ void readChar(char); }; #endif /* AUTOMATIMPL_H_ */Jetzt bekomme ich Fehler Meldung in allen State0.h bis State10.h und zwar immer an der gleichen stellen. Siehe oben State0.h Zeilen 6 und 11.
Kann bitte jemand erklären was ich da falsch mache?
Danke schon mal.
-
sieht etwas verstreuselt aus.
Du bindest deine State-Header in die Automat-Header ein und dann in der State-Header nochmal die Automat-Header genau wie in jeder StateX-Header

Des verwirrt nicht nur mich sondern auch deinen Compiler

Die Header in der Automat machen irgendwie erstmal keinen Sinn. Du machst ja da eh schon ne Vorwärtsdeklaration deiner State. Schau mal, obs dann schon geht.

-
Das mache ich weil in meinem Automat alle Zustaende erstmal erstellt werden;
void Automat::initAutomat(){ //init States this->statePool = new State[11]; this->statePool[0] = new State0(); this->statePool[1] = new State1(); this->statePool[2] = new State2(); this->statePool[3] = new State3(); this->statePool[4] = new State4(); this->statePool[5] = new State5(); this->statePool[6] = new State6(); this->statePool[7] = new State7(); this->statePool[8] = new State8(); this->statePool[9] = new State9(); this->statePool[10] = new State10(); setCurrentState(0); }
-
versuche nachzuvollziehen, in welcher Reihenfolge die Header in den verschiedenen Klassen eingebunden werden. Bedenke dabei, dass durch die Präprozessordirektiven dies nur einmal geschieht.
class State wird vor class Automat eingebunden > Vorwärtsdeklaration dann also hier unnötig. In State.h ist Automat also nicht bekannt, drum müsste dann hier die Klasse vorher bekannt gemacht werden.