C++ méthode Substituée pas appelé

Forme.h

namespace Graphics {
    class Shape {
    public:
        virtual void Render(Point point) {};
    };
}

Rect.h

namespace Graphics {
    class Rect : public Shape {
    public:
        Rect(float x, float y);
        Rect();
        void setSize(float x, float y);
        virtual void Render(Point point);

    private:
        float sizeX;
        float sizeY;
    };
}

struct ShapePointPair {
    Shape shape;
    Point location;
};

Utilisée comme ceci:

std::vector<Graphics::ShapePointPair> theShapes = theSurface.getList();

for(int i = 0; i < theShapes.size(); i++) {
    theShapes[i].shape.Render(theShapes[i].location);
}

Ce code finit par appeler Shape::Render et pas Rect::Render

Je suppose que c'est parce que c'est un moulage de la Rect à un Shape, mais je n'ai aucune idée de comment faire pour arrêter cela. Je suis en train de laisser chaque forme de contrôle de la manière dont elle est rendue par des raisons impérieuses le Render méthode.

Des idées sur la façon de réaliser cet objectif?

Peut-être que vous voulez nous montrer le code qui crée les éléments du vecteur?
Le problème et la solution sont presque identiques à ce stackoverflow.com/questions/1230006 question. Comme là-bas, vous avez un vecteur de (struct containting un béton de classe de base, vous devez créer par découpage les classes dérivées si vous attendez Rect::Render pour être appelé.

OriginalL'auteur Simon Moles | 2009-09-18