Bonjour, il y a peux j'ai demander comment faire en sorte que les fonction membre de la classe B si-dessous soit accessible depuis mon vector A. On m'avait dit que c'était possible grâce au polymorphisme mais en réalité ça ne fonctionne pas du tout.
Dans le rôle de la class A, j'ai :
Et dans le rôle de la class B j'ai ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 class Entity : public sf::Drawable, public sf::Transformable { public: Entity( sf::Vector2f const &size, sf::Vector2f const &position ) { _shape.setFillColor(sf::Color::Red); _shape.setPosition(position); _shape.setSize(size); } void setPosition( sf::Vector2f const &position ) { _shape.setPosition( position ); } sf::Vector2f getPosition() const { return _shape.getPosition(); } protected: virtual void draw(sf::RenderTarget& target, sf::RenderStates states) const { states.transform *= getTransform(); states.texture = NULL; target.draw(_shape); } sf::RectangleShape _shape; };
Donc dans mon main j'ai fait comme on me l'avait dit en faisant ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 class Bullet : public Entity { public: Bullet( sf::Vector2f size, sf::Vector2f position ) : Entity( size, position ) { } void create( float velocity, unsigned int direction ) { std::cout << "created"; _velocity = velocity; _direction = direction > 360 ? 360 : direction; } void update() { std::cout << "updated" << std::endl; _shape.move( sf::Vector2f( std::cos( _direction ) * _velocity, std::sin( _direction ) * _velocity ) ); } private: float _velocity; unsigned int _direction; };
Mais maintenant si je veux accéder à la fonction membre update() de ma classe B et bien cela n'utilise pas ma fonction.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 std::vector<std::unique_ptr<Entity>> v_e; auto b = std::make_unique<Bullet>( sf::Vector2f(10,10), sf::Vector2f(75,75) ) ; b->create( 1000, 75 ); v_e.push_back( std::move(b) );
Pour y accéder je fait comme ceci :
Donc certes je n'ai aucune erreurs mais ça n'a pas du tout résolue mon problème
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 for( size_t i{0}; i < v_e.size(); ++i ) v_e[i]->update();
Que doit-je faire d'autre pour que cela fonctionne ?
Partager