C++ 重载和覆盖 - 无法使用类型的右值初始化类型的参数



我通常是一个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 可以不这样做,还是我错过了什么?

派生类 hides 中同名的任何功能中的函数(即使您覆盖虚拟函数(。要解开其他过载,请使用" using"语句:

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

最新更新