首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >派生类不继承基类中的重载方法。

派生类不继承基类中的重载方法。
EN

Stack Overflow用户
提问于 2014-10-27 21:56:51
回答 2查看 1.5K关注 0票数 5

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

错误C2660:‘派生::load’:function不使用0参数

下面是一个完整的示例(由于错误而没有编译):

代码语言:javascript
复制
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
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-27 21:59:59

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

但是在派生类中声明void load(int i),这意味着它是隐藏的。

using Base::load;添加到Derived以将load的所有非重写定义从Base添加到Derived中的重载集中。

或者,使用范围解析操作符d.Base::load();显式地调用d.Base::load();类版本.

票数 12
EN

Stack Overflow用户

发布于 2014-10-27 21:59:22

您必须显式地调用Base 1:d.Base::load();。我不知道为什么,但很管用。我猜覆盖会隐藏所有的重载。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26597542

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档