5

我想在基类中有一个方法调用将在派生类中实现的纯虚拟方法。但是,派生类似乎没有继承基类的无参数方法。我究竟做错了什么?编译器是 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
}
4

2 回答 2

12

哦,派生类确实继承void load()

但是您void load(int i)在派生类中声明,这意味着它被遮蔽了。

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

或者,使用 scope-resolution-operator 显式调用Base-class-version d.Base::load();

于 2014-10-27T21:59:59.420 回答
2

你必须Base明确地调用它:d.Base::load();. 我不知道为什么,但它有效。我的猜测是覆盖隐藏了所有重载。

于 2014-10-27T21:59:22.243 回答