派生类不从基类继承重载方法
Posted
技术标签:
【中文标题】派生类不从基类继承重载方法【英文标题】:Derived class not inheriting overloaded method from base class 【发布时间】:2014-12-23 05:17:52 【问题描述】:我希望基类中的方法调用将在派生类中实现的纯虚拟方法。但是,派生类似乎没有继承基类的无参数方法。我究竟做错了什么?编译器是 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
【问题讨论】:
@Deduplicator 希望我可以为编辑 +1。 不客气,因为这只是最后的润色。 VS2008 C++ can't seem to inherit const overloaded method的可能重复 【参考方案1】:哦,派生类确实继承void load()
。
但是你在派生类中声明void load(int i)
,这意味着它被遮蔽了。
将using Base::load;
添加到Derived
以将Base
中load
的所有非覆盖定义添加到Derived
中的重载集。
或者,使用 scope-resolution-operator d.Base::load();
显式调用 Base
-class-version。
【讨论】:
【参考方案2】:您必须明确调用Base
:d.Base::load();
。我不知道为什么,但它有效。我的猜测是覆盖隐藏了所有重载。
【讨论】:
以上是关于派生类不从基类继承重载方法的主要内容,如果未能解决你的问题,请参考以下文章
C++派生类是不是可以从基类继承静态数据成员和静态成员函数?