派生类不继承基类的重载方法 [英] Derived class not inheriting overloaded method from base class
问题描述
我想在基类中有一个方法调用一个纯虚方法,将在派生类中实现。然而,基类无参数方法似乎不被继承的派生类。我做错了什么?编译器是MSVC12。
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.
错误C2660:'Derived :: load':function不接受0个参数
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
}
推荐答案
噢,派生类确实继承 void load()
。
但是你在派生类中声明了 void load(int i)
,这意味着它被隐藏。
But you are declaring void load(int i)
in the derived class, which means it is shadowed.
使用Base :: load; 添加到
派生
添加所有未覆盖的定义加载
加载从
基础
。
Add using Base::load;
to Derived
to add all non-overridden definitions of load
from Base
to the overload-set in Derived
.
或者,使用scope-resolution-operator <$ c $显式调用 Base
c> d.Base :: load(); 。
Alternatively, call the Base
-class-version explicitly with the scope-resolution-operator d.Base::load();
.
这篇关于派生类不继承基类的重载方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!