Frage zu vererbungsstruktur



  • Wollte mal fragen, ob so eine Struktur in C++ möglich ist:

    http://s14.directupload.net/images/130811/d38ji3ad.png

    Bekomm nämlich in der Projectile.hpp den fehler, dass die basisklasse undefiniert ist, obwohl die MovableObject.hpp eingebunden ist.

    Erstmal nur den Aufbau, wenn ihr code braucht sagt bescheid, aber ich befürchte, dass das so wie ich möchte garnicht geht 😕

    (Hintergrund ist der, dass ein Projektil ein Movable Object ist, und ein MovableObject grundsätzlich projektile erzeugen kann (und ein template dafür braucht))



  • Die Basisklasse hat einen Zeiger vom Typ der abgeleiteten Klasse, seh ich das richtig? Das ist irgendwie merkwürdig.



  • Daepilin schrieb:

    Wollte mal fragen, ob so eine Struktur in C++ möglich ist:

    Ja, ist möglich.
    Nein, ist nicht sinnvoll.



  • @out, jo, hab ja gesagt, die basisklasse ist generell eine klasse für bewegliche objekte, ein solches soll mein projektil sein, außerdem soll jedes bewegliche objekt ein "template" für projektile beinhalten, um projektile generieren zu können:

    mal der code (gekürzt)

    Projectile.hpp:

    #ifndef PROJECTILE_HPP
    #define PROJECTILE_HPP
    #include"MovableObject.hpp"
    
    class Projectile : public MovableObject{
    private:
    //
    public:
    	Projectile(sf::RenderWindow *rw, 
    				  sf::Event *ev, 
    				  sf::Vector2f *scale,
    				  EntityManager *em,
    				  std::string texturepath,
    				  sf::Vector2f position,
    				  unsigned short animcount, 
    				  unsigned short collide, 
    				  unsigned short collidedamage,
    				  Tile **currentiles,
    				  sf::FloatRect collisionbox,
    				  float speed,
    				  sf::Vector2f direction,
    				  std::string id);
    	Projectile(Projectile *projectile);
    	~Projectile();
    
    	void Update(float frametime);
    };
    
    #endif
    

    Movableobject.hpp

    #ifndef MOVABLEOBJECT_HPP
    #define MOVABLEOBJECT_HPP
    #include"Object.hpp"
    #include"../Stage/Tile.hpp"
    #include"EntityManager.hpp"
    #include"Projectile.hpp"
    
    class MovableObject : public Object{
    private:
    //
    protected:
    	Projectile    *mProjectileTemplate;
    	//
    
    public:
    	//
    };
    
    #endif
    

    Fehler:

    Projectile.hpp(5): error C2504: 'MovableObject': Basisklasse undefiniert
    

    Intellisense zeigt keine probleme an



  • Daepilin schrieb:

    Projectile.hpp:

    #include"MovableObject.hpp"
    

    Movableobject.hpp

    #include"Projectile.hpp"
    

    Ne, so wird das nichts. Bau niemals zyklische Abhängigkeiten. Da haste eine Endlosschleife produziert. Du musst dein komplettes Design überdenken. Leider kenn ich mich mit so "kleine Spielchen programmieren" nicht aus, um dir da beim Design weiterhelfen zu können. Vielleicht hast du Glück und Nexus liest deinen Beitrag, der kennt sich damit ziemlich gut aus. 🙂



  • Hm, k 😕 Werd ich vlt ne zwischenklasse für die objekte einfügen die schießen können sollen. Auch wenn dann die möglichkeit wegfällt, dass ein projektil weitere projektile verschießen kann.





  • Danke, habs mal überflogen.

    Scheint ansich ne super Lösung zu sein, auch wenn ich dann wieder viel Überarbeiten müsste 😕 (und erstmal viel verstehen).

    Wird aber wohl das beste sein, bei meinem aktuellen system hab ich teilweise echt schon probleme sachen zu ändern, ohne, dass es sehr unübersichtlich wird.


Anmelden zum Antworten