Derived class not inheriting overloaded method from base class

不问归期 提交于 2019-12-01 20:29:16

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!