I would like to have a method in a base class call a pure virtual method that will be implemented in a derived class. However, the base class parameterless method doesn't seem to be inherited by the derived class. What am I doing wrong? Compiler is MSVC12.
error C2660: 'Derived::load' : function does not take 0 arguments
Here is a complete example (that doesn't compile due to the error):
struct Base
{
void load() { load(42); }; // Making this virtual doesn't matter.
virtual void load(int i) = 0;
};
struct Derived : Base
{
virtual void load(int i) {};
};
int main()
{
Derived d;
d.load(); // error C2660: 'Derived::load' : function does not take 0 arguments
}
You have to call the
Base
one explicitly:d.Base::load();
. I have no idea why, but it works. My guess is that overriding hides all overloads.Oh, the derived class does inherit
void load()
.But you are declaring
void load(int i)
in the derived class, which means it is shadowed.Add
using Base::load;
toDerived
to add all non-overridden definitions ofload
fromBase
to the overload-set inDerived
.Alternatively, call the
Base
-class-version explicitly with the scope-resolution-operatord.Base::load();
.