C ++ наследование, базовые методы скрыты

У меня есть простой базовый класс C ++, пример производного класса.

// 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;
}

Если я сейчас сделаю указатель на базу, это нормально скомпилируется.

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

Base *obj = new Derived();

Но если я сделаю указатель на класс Derived, то компилятор (VC 2008 и 2010) скажет, что:

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

И вот код, который вызывает эту ошибку:

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

Derived *obj = new Derived();

Кажется, что методы базового класса скрыты. У меня сложилось впечатление, что поскольку методы базового класса являются виртуальными, они должны быть видны даже при просмотре с помощью указателя на производное, или я ошибаюсь?

Ответы на вопрос(2)

Ваш ответ на вопрос