C ++ Overload&覆盖 - 无法初始化类型'''一个左右类型''

时间:2017-04-25 15:49:24

标签: c++ overloading method-overriding

我通常是一个C#家伙,它处理这个问题,主要是在处理"最佳匹配"解决调用方法。我现在尝试在C ++中做类似的事情,但是我遇到了编译错误。简而言之,它是方法重载 重写的组合。

class Bar:public Foo {} //目录并不重要

class Base
{
public:
    virtual void Do(Foo* foo) { }
    virtual void Do(Bar* bar) { }
};
class Derived : public Base
{
public:
    virtual void Do(Bar* bar) { }
}


Foo* foo = new Foo();
Derived* d = new Derived();
d->Do(foo); //cannot initialize a parameter of type 'Bar*' with an rvalue of type 'Foo*'

因此,它尝试针对 Derived中的方法解析方法,而不是识别基类实现有效匹配。同样,C#找到了基本方法。 C ++不能这样做,还是我错过了什么?

1 个答案:

答案 0 :(得分:4)

派生类中的函数隐藏基类中任何相同名称的函数(即使您正在覆盖虚函数)。要取消隐藏其他重载,请使用“using”语句:

class Derived : public Base
{
public:
    virtual void Do(Bar* bar) { }
    using Base::Do;
};