我想在基类中调用一个纯虚方法,该方法将在派生类中实现。但是,基类无参数方法似乎不会被派生类继承。我究竟做错了什么?编译器是MSVC12。
错误C2660:'派生::加载' :function不带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
}
答案 0 :(得分:11)
哦,派生类 继承void load()
。
但是你在派生类中声明void load(int i)
,这意味着它被遮蔽了。
将using Base::load;
添加到Derived
,将load
的所有未覆盖定义从Base
添加到Derived
中的重载集。
或者,使用scope-resolution-operator Base
显式调用d.Base::load();
- class-version。
答案 1 :(得分:2)
您必须明确调用Base
:d.Base::load();
。我不知道为什么,但它确实有效。我的猜测是覆盖会隐藏所有重载。