问题
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
}
回答1:
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;
to Derived
to add all non-overridden definitions of load
from Base
to the overload-set in Derived
.
Alternatively, call the Base
-class-version explicitly with the scope-resolution-operator d.Base::load();
.
回答2:
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.
来源:https://stackoverflow.com/questions/26597542/derived-class-not-inheriting-overloaded-method-from-base-class