Vererbung und static



  • Hi

    ich bastel jetzt schon den halben Mittag an meinem Programm und finde den verdammten Fehler nicht. Auch google ist nicht wirklich hilfreich.

    Ich habe folgendes Problem:

    Ich habe eine Basisklasse (Interface)
    IState:

    /*
     * IState.h
     *
     *  Created on: 03.12.2010
     *      Author: Pascal
     */
    
    #ifndef ISTATE_H_
    #define ISTATE_H_
    
    #include "../IAutomat.h"
    class IAutomat;
    
    class IState {
    
    protected:
    	bool isFinal;
    
    public:
    	// IState();
    	virtual void read(char c, IAutomat* automat)=0;
    	// virtual ~IState();
    
    };
    
    #endif /* ISTATE_H_ */
    

    Davon erben mehrere State Klassen. ( State0 -State18)
    Meine State0 Klasse sieht wie folgt aus:

    /*
     * State0.h
     *
     *  Created on: 03.12.2010
     *      Author: Pascal
     */
    
    #ifndef STATE0_H_
    #define STATE0_H_
    
    #include "IState.h"
    
    class State0: public IState{
    
    private:
    	static IState* instance;
    	State0(void);
    	State0(const State0&);
    	~State0(void);
    public:
    	void read(char c, IAutomat* automat);
    	static IState& getInstance();
            static void destroy();
    
    };
    
    #endif /* STATE0_H_ */
    

    Bis jetzt geht auch alles. Sobald ich aber meinen 2ten State anlege:
    State1 und dort ebenfalls

    #include "IState"
    

    mache fliegt mir mein kompletter Code um die Ohren. Woran kann das liegen.
    Fehlermeldung:

    State0.h:14: error: expected class-name before '{' token
    State0.h:17: error: ISO C++ forbids declaration of 'IState' with no type
    State0.h:17: error: expected ';' before '*' token
    State0.h:22: error: 'IAutomat' has not been declared
    State0.h:23: error: ISO C++ forbids declaration of 'IState' with no type
    State0.h:23: error: expected ';' before '&' token

    Schon mal im voraus vielen Dank für die Hilfe.

    Gruß Passi



  • #include "IState"
    

    😕

    oder

    #include "IState.j"
    


  • includierer schrieb:

    #include "IState"
    

    😕

    oder

    #include "IState.j"
    

    Es sollte natürlich

    #include "IState.h"
    

    heißen



  • Was für einen Compiler verwendest du? Poste ein kompilierbares Minimalbeispiel, welches sich kompilieren lässt bzw. poste den Code, wo der Fehler auftritt.

    #include "../IAutomat.h"
    class IAutomat;
    

    Was soll das? Wenn du IAutomat.h inkludierst, dann brauchst du auch keine Forward-Deklaration mehr.



  • Wenn ich das #include "../IAutomat.h" entferne, kann ich den Code ohne Probleme kompilieren.



  • baust du einen (endlichen, whatever) Automaten mit maximal 18 Zuständen? Ich verstehe den Sinn hinter statischen Verpointerung nicht 🙂 wenn du lust hast elaborier doch mal. Ich würde eine "Einmaligkeit" von states allenfalls mittels einer ID festmachen, nicht dafür 18 Klassen die halb Singletons sind herstellen ... deine Fehlermeldungen sprechen dafür dass irgendwas mit dem Inlcude der IState.h nicht funzt - er erkennt das nicht als Klasse weil er nirgend ne Deklaration davon herbekommt. Selbiges gilt für IAutomat.h ... die solltest du -wenn nur vorwärts deklariert- in der State0.h noch includieren da über IState.h da auch nur die Vorwärtsdekl. bekannt ist



  • padreigh schrieb:

    baust du einen (endlichen, whatever) Automaten mit maximal 18 Zuständen?

    🙄

    Nee... Mit 19 Zuständen 🤡


Anmelden zum Antworten