派生类没有从基类继承重载方法



我希望基类中的一个方法调用将在派生类中实现的纯虚拟方法。然而,基类无参数方法似乎并没有被派生类继承。我做错了什么?编译器是MSVC12。

错误C2660:"Derived::load":函数不接受0个参数

下面是一个完整的例子(由于错误而无法编译):

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),这意味着它被遮蔽了。

using Base::load;添加到Derived,以将Base中所有未覆盖的load定义添加到Derived中的重载集。

或者,使用作用域解析运算符d.Base::load();显式调用Base类版本。

您必须显式调用Based.Base::load();。我不知道为什么,但它是有效的。我的猜测是覆盖会隐藏所有重载。

最新更新