Klasse nicht Deklariert?



  • Hallo,
    ich sitze jetzt seit 4 tagen vor dem selben problem und komm nicht mehr weiter, ich finde keinen fehler, der compiler anscheinend schon. ist wahrscheinlich etwas triviales das ich die ganze zeit übersehe.

    ich habe drei klassen, eine grundklasse, einen erben und eine klasse die einen std::vector mit der grundklasse als member hat. grundklassen deklaration wird ohne probleme durchgegangen, aber der erbe verlangt einen klassennamen vor "{" und der vector sagt er kennt die grundklasse nicht.

    die grundklasse(particle.h)

    #ifndef HEADER_PARTICLE
    #define HEADER_PARTICLE
    
    #include "../position.h"
    
    class Particle {
    	public:
    							Particle();
    							Particle(Position position);
    		virtual			   ~Particle();
    		virtual void		think();
    		virtual void		draw();
    	protected:
    				Position	pos;
    };
    
    #endif
    

    der erbe(waterdrop.h)

    #ifndef HEADER_WATERDROP
    #define HEADER_WATERDROP
    
    #include "particle.h"
    #include "../position.h"
    #include "../vector.h"
    
    class WaterDrop : public Particle {
    	public:
    							WaterDrop(Position start, Vector acceleration, Vector gravity);
    		virtual	void		draw();
    		virtual	void		think();
    	protected:
    		Vector				accel;
    		Vector				grav;
    		Position			oldPos;
    };
    
    #endif
    

    und die letzte klasse mit dem std::vector (emitter.h)

    #ifndef HEADER_PEMITTER
    #define HEADER_PEMITTER
    
    #include "particle.h"
    #include <vector>
    
    class Emitter {
    	public:
    		virtual	void				update();
    	protected:
    		int							maxParticle;
    		std::vector<Particle>		particles;
    };
    
    #endif
    

    Vector(ohne std::) ist eine von mir definierte klasse für 3d-Vektoren, nur damit das nicht zu verwirrungen führt.

    der compiler meldet mir

    In file included from independent/particle/waterfall.h:11,
                     from independent/particle/waterfall.cpp:9:
    independent/particle/waterdrop.h:16: error: expected class-name before ‘{’ token
    In file included from independent/particle/waterfall.h:12,
                     from independent/particle/waterfall.cpp:9:
    independent/particle/emitter.h:19: error: ‘Particle’ was not declared in this scope
    independent/particle/emitter.h:19: error: template argument 1 is invalid
    independent/particle/emitter.h:19: error: template argument 2 is invalid
    

    es hat für mich den anschein das Particle irgendwie ein paar macken hat, die der compiler nicht meldet. könnt ihr mir helfen?



  • Also ich bin nicht in der Lage dir so zu helfen. ADie Zeilennummern der Fehlermeldungen stimmen gar nicht überein...

    Kommentiert doch einfach mal so viel aus bis es wieder kompiliert. Versuch dann nochmal den Fehler selber zu finden und wenn du es dann noch immer nicht geschafft hast, dann reduzierst du den Code soweit, dass ein kompilierbares Beispiel rauskommt, welches die Fehlermeldung noch enthält.

    Die Fehlermeldung begegnet einem jedenfalls oft, wenn man ein Semikolon vergessen hat:

    class A
    {
    } // <-- Fehlendes Semikolon
    

    Schau mal in deiner Klasse Vector nach, ob dort nicht eins fehlt...



  • Zeig auch mal die dazugehörigen .cpp's.

    btw:

    std::vector<Particle> particles;
    

    Geht so nicht, weil du keine Particle erzeugen kannst. Ist ja nur eine abstrakte Klasse.
    Speicher da lieber Zeiger.

    Das löst vermutlich nicht die erste Fehlermeldung aus, sondern es ist eher so etwas, wie mein Vorposter andeutet.



  • is ja mal wieder typisch, kaum ne frage im internet gepostet, schon den fehler gefunden.

    ich hatte in der waterfall.h auch #ifndef #define #endif drin, allerdings hatte ich das aus faulheit aus der particle.h importiert und vergessen den namen zu ändern.

    naja, trotzdem danke für die hilfe und den tipp mit den pointern


Anmelden zum Antworten