gegenseitiges includen



  • Ich habe mich an die Anweisungen von diesem Thread gehalten link, aber mein Compiler sagt immernoch "multiple types in one declaration".

    Mein Code sieht so aus:

    Klasse a.hpp

    #ifndef A
    #define A
    
    class b;
    
    class a : public x {
     b* nn;
    //bunch of stuff
    };  //<--- hier wird der Fehler geworfen (laut compiler)
    
    #endif
    

    a.cpp

    #include "a.hpp"
    #include "b.hpp"
    //stuff
    

    Klasse b.hpp

    #ifndef B
    #define B
    
    class a;
    
    class b {
     a* nn;
    //stuff
    }
    
    #endif
    

    b.cpp

    #include "b.hpp"
    #include "a.hpp"
    //stuff
    

    Wo habe ich den Murks gebaut?^^



  • Ich glaub zwar nicht, dass das dein Originalcode ist, aber bei dir fehlt ein Semikolon hinter der Klassen-Deklaration von class b.



  • in der tat, das ist nicht mein Originalcode :D, der ist ein bischen lang und würde letzendlich nix am Problem an sich ändern. Deswegen habe ich Pseudocode genommen 😉



  • Das Semikolon ist aber im Originalcode vorhanden?
    Sonst kann ich keine Fehler entdecken. Probiers es lieber doch mal mit dem Original, statt Pseudocode den du versuchst dem Original nachzuempfindenden.



  • Stationable.hpp

    #ifndef STATIONABLE
    #define STATIONABLE
    
    class Moveable;
    
    #include "Model_Placeable.hpp"
    #include "../util/Enums.hpp"
    //#include "../unit/Model_Moveable.hpp"
    
    class Stationable : public Placeable {
    	Moveable* occupier;
    	Type kind;
    
    public:
    	Stationable(Point,Point,Type);
    	Moveable* get_occupier();
    	void set_occupier(Moveable*);
    	Type get_type();
    	virtual ~Stationable() = 0;
    
    };
    
    #endif
    

    Stationable.cpp

    #include "../unit/Model_Moveable.hpp"
    #include "Model_Stationable.hpp"
    

    Moveable.hpp

    #ifndef MOVEABLE
    #define MOVEABLE
    
    class Stationable;
    
    //#include "../area/Model_Stationable.hpp"
    
    class Moveable {
    	Stationable* stationed;
    
    public:
    	Moveable(Stationable*);
    	Stationable* get_stationed();
    	virtual void set_stationed(Stationable*) = 0;
    	virtual bool can_stationed(Stationable*) = 0;
    	virtual ~Moveable() = 0;
    };
    
    #endif
    

    Moveable.cpp

    #include "../area/Model_Stationable.hpp"
    #include "Model_Moveable.hpp"
    

    Compiler:

    g++ -c ./area/Model_Stationable.cpp
    In file included from ./area/Model_Stationable.cpp:2:
    ./area/Model_Stationable.hpp:25: error: multiple types in one declaration
    


  • Da fehlt noch was, um den Fehler lokalisieren zu können. Was steht zum Beispiel in Model_Placeable.hpp und utils/Enums.hpp? Aber bevor wir hier vom Hundertsten ins Tausende kommen, dein Fehler ist ein anderer, als du vermutest. Dein Problem ist keine doppelte Definition, sondern dass du irgendwas mit mehreren Typen deklarierst. Also etwas wie int float foo; und das ist natürlich Unsinn. Ich denke du hast irgend einen Bezeichner gewählt, der schon für einen Typen reserviert ist. Reine Mutmaßung, aber schau dich mal in der Richtung um.



  • Ich hatte bei der Deklarationd er Enums die Semikolons vergessen -.-. Danke für den Hinweis, ich hätte mich todgesucht.



  • Falls dir nicht ganz klar ist, wie es zu diesem Fehler gekommen ist:
    http://stackoverflow.com/questions/1753189/c-multiple-types-in-one-declaration-error


Anmelden zum Antworten