我希望基类中有一个方法调用一个将在派生类中实现的纯虚拟方法。但是,基类无参数方法似乎不是由派生类继承的。我做错了什么?编译器是MSVC12。
错误C2660:‘派生::load’: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
}发布于 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();类版本.
发布于 2014-10-27 21:59:22
您必须显式地调用Base 1:d.Base::load();。我不知道为什么,但很管用。我猜覆盖会隐藏所有的重载。
https://stackoverflow.com/questions/26597542
复制相似问题