C ++ Vererbung, Basismethoden versteckt

Ich habe eine einfache C ++ - Basisklasse, abgeleitetes Klassenbeispiel.

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

Wenn ich jetzt einen Zeiger auf die Base erstelle, funktioniert dies einwandfrei.

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

Base *obj = new Derived();

Aber wenn ich einen Zeiger auf die abgeleitete Klasse mache, beschwert sich der Compiler (VC 2008 und 2010) über:

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

Und hier ist der Code, der diesen Fehler verursacht:

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

Derived *obj = new Derived();

Es scheint, dass die Basisklassenmethoden ausgeblendet werden. Ich hatte den Eindruck, dass die Basisklassenmethoden, da sie virtuell sind, auch dann sichtbar sein sollten, wenn sie vom abgeleiteten Zeiger aus betrachtet werden, oder irre ich mich?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage