我通常是一个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;
};