Herencia de C ++, métodos básicos ocultos

Tengo una clase base simple de C ++, ejemplo de clase derivada.

// Base.hpp 
#pragma once

class Base
{
public:
    virtual float getData();
    virtual void setData(float a, float b);
    virtual void setData(float d);

protected:
    float data;
};

//Base.cpp
#include "stdafx.h"
#include "Base.hpp"

float Base::getData()
{ 
    return data; 
}

void Base::setData(float a, float b)
{ 
    setData(a);
}

void Base::setData(float d)
{ 
    data = d;
}

//Derived.hpp
#pragma once
#include "Base.hpp"

class Derived
    : public Base
{
public:
    virtual void setData(float d);
};

//Derived.cpp
#include "stdafx.h"
#include "Derived.hpp"

void Derived::setData(float d)
{
    data = d + 10.0f;
}

Si ahora hago un puntero a la Base, esto se compila bien.

//Main.cpp
#include "stdafx.h"
#include "Base.hpp"
#include "Derived.hpp"

Base *obj = new Derived();

Pero si hago un puntero a la clase Derivada, entonces el compilador (VC 2008 y 2010) se queja de que:

Main.cpp(12): error C2660: 'Derived::setData' : function does not take 2 arguments

Y aquí está el código que causa este error:

//Main.cpp
#include "stdafx.h"
#include "Base.hpp"
#include "Derived.hpp"

Derived *obj = new Derived();

Parece que los métodos de la clase base están ocultos. Tenía la impresión de que, dado que los métodos de la clase base son virtuales, deberían ser visibles incluso cuando se ven desde el puntero Derivado, ¿o me equivoco?

Respuestas a la pregunta(2)

Su respuesta a la pregunta