Problem w dziedziczeniu [SFML 2.0]
Ostatnio zmodyfikowano 2015-05-24 17:28
jarek20 Temat założony przez niniejszego użytkownika |
Problem w dziedziczeniu [SFML 2.0] » 2015-05-24 13:32:24 Witam mam problem gdyż tworzę grę w oparciu o klasy pochodne #ifndef PLANET_H #define PLANET_H #include <SFML/Graphics.hpp>
class PObject : public sf::Shape { public: sf::Vector2f velocity; unsigned int gmass; virtual void create(); virtual void centerOrigin(); virtual void pull( PObject * ); virtual void fupdate(); };
class Planet : public PObject , public sf::CircleShape { public: Planet(); };
#endif
Problem w tym ,że gdy tworze objekt typu Planet to wyrzuca mi ze niektóre funkcje wystepuja podwojnie. Myślałem że skoro sf::Circleshape dziedziczy po sf::Shape to nie będzie problemu i się uzupełnią. Będe wdzięczny jak ktos mi pokaże jak to zrobić. |
|
Monika90 |
» 2015-05-24 14:53:05 Problem w tym ,że gdy tworze objekt typu Planet to wyrzuca mi ze niektóre funkcje wystepuja podwojnie. Myślałem że |
To dziwne, bo przede wszystkim powinno Ci wyrzucić, że klasa Planet jest abstrakcyjna, z powodu funkcji sf::Shape::getPointCount i sf::Shape::getPoint. Nie można tworzyć obiektów klas abstrakcyjnych. |
|
jarek20 Temat założony przez niniejszego użytkownika |
» 2015-05-24 17:17:27 Tak, wystąpiły dwa błędy ale zapomniałem napisać że ten o abstrakcyjnej klasie naprawiłem. Robię teraz trochę inne podejście ale chciałbym wiedzieć czy jest taka możliwość ze tak 'uzupełnic' te funkcje z Shape przez circleshape |
|
jarek20 Temat założony przez niniejszego użytkownika |
» 2015-05-24 17:28:49 Mam takie rozwiązanie na około: class PObject : public sf::Shape { public: sf::Vector2f velocity; unsigned int gmass; virtual void create(); virtual void pull( PObject * ); virtual void fupdate(); };
class Planet : public PObject { sf::CircleShape t; public: Planet(); Planet( float ); unsigned int getPointCount() const { return t.getPointCount(); } sf::Vector2f getPoint( unsigned int index ) const { return t.getPoint( index ); } void setRadius( float r ) { t.setRadius( r ); update(); } float getRadius() { return t.getRadius(); } void centerOrigin(); };
i niby działa ale i tak jak ktoś wie jak rozwiązać ten problem w bardziej 'elegancki' sposób to proszę o podpowiedź. (Oczywiście pomijając przerzucenie funkcji do odzielnego pliku bo to jest w trakcie :) ) |
|
« 1 » |