具有相同名称的虚拟成员函数的继承

kec*_*sap 2 c++ virtual inheritance g++ function

class A
{
A() {};
virtual ~A() {};
virtual void Start() {};
virtual void Start(float a) {};
};

class B : public A
{ };

class C : public A
{
virtual void Start(float a) {};
}


...
B BObj;
BObj.Start(); // -> fine, no complain from g++
...

...
C CObj;
CObj.Start(); // -> not fine -> error: no matching function for call to ‘C::Start()’
...
Run Code Online (Sandbox Code Playgroud)

我怀疑问题来自于两个虚函数具有相同的名称,但参数签名不同.我想知道的是,这是一个特定于g ++的错误消息,如何实现vtable,或者它是基于C++标准的错误.

Umm*_*mma 5

重载功能隐藏所有其他Start功能.要使用它们添加using A::Start:

class C : public A
{
public:
using A::Start;
virtual void Start(float a) {};
}
Run Code Online (Sandbox Code Playgroud)

也在Start A公开.

编辑: 在这里你可以找到派生类隐藏基类函数的原因.