1 pièce(s) jointe(s)
Ambiguité avec la classe base
salut, j'ai un nouveau problème ennuyant, après succéder a créer la classe Obstacle, j'avais un question : au lieu d'écrire ça :
Code:
1 2 3 4 5 6 7
| RectangleObstacle* obstacle[2]{
new RectangleObstacle(Vector2f(50, 50), Vector2f(50, 50)),
new RectangleObstacle(Vector2f(50, 50), Vector2f(150, 150))};
CircleObstacle* obstacle2[2]{
new CircleObstacle(Vector2f(50, 50), Vector2f(50, 50)),
new CircleObstacle(Vector2f(50, 50), Vector2f(150, 150))}; |
pour quoi je n'écrivais pas quelque chose comme:
Code:
1 2 3 4 5
| Obstacle* obstacle[4]{
new RectangleObstacle(Vector2f(50, 50), Vector2f(50, 50)),
new RectangleObstacle(Vector2f(50, 50), Vector2f(150, 150)),
new CircleObstacle(Vector2f(50, 50), Vector2f(50, 50)),
new CircleObstacle(Vector2f(50, 50), Vector2f(150, 150))}; |
Mais, je trouve l'erreur suivante :
error C2594: 'argument'*: conversions ambiguës de 'obstacle::RectangleObstacle' en 'const sf::Drawable &'
mais cette erreur reste même après faire les héritages virtuelles.
Le code:
Code:
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 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
| #pragma once
#include <SFML\Graphics.hpp>
#include "Object.h"
namespace obstacle
{
class Obstacle abstract : public virtual Object, public virtual sf::Drawable
{
public:
virtual ~Obstacle(void) = 0 {}
void draw(sf::RenderTarget &target, sf::RenderStates states) const {}
private:
friend class CollisionManager;
};
class ConvexObstacle:
public virtual Obstacle
{
public:
ConvexObstacle();
ConvexObstacle(ConvexObstacle &source);
sf::IntRect GetBoundingBox() const;
~ConvexObstacle(){};
// sf::Transformable setPosition(sf::Vector2f &position);
// sf::Transformable setPosition(float x, float y);
// sf::Transformable move(sf::Vector2f &position);
// sf::Transformable move(float x, float y);
private:
sf::ConvexShape personnalisé;
friend class CollisionManager;
};
class CircleObstacle :
public virtual Obstacle, public virtual sf::CircleShape
{
public:
CircleObstacle(int radius, sf::Vector2f position, sf::Color fill= sf::Color::White, int pointcount = 30);
CircleObstacle(CircleObstacle &source);
sf::IntRect GetBoundingBox() const;
~CircleObstacle(){};
private:
sf::CircleShape circle;
friend class CollisionManager;
};
class RectangleObstacle :
public virtual Obstacle, public virtual sf::RectangleShape
{
public:
RectangleObstacle(sf::Vector2f size, sf::Vector2f position, sf::Color fill = sf::Color::White);
RectangleObstacle(RectangleObstacle &source);
~RectangleObstacle();
sf::IntRect GetBoundingBox() const;
using Obstacle::draw;
private:
friend class CollisionManager;
};
}; |
aide s'il vous plait...