【发布时间】:2011-06-20 22:33:37
【问题描述】:
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()’
...
我怀疑问题来自两个虚函数具有相同的名称,但不同的参数签名。我想知道的是,这是g++特有的错误信息,vtable是如何实现的,还是基于C++标准的错误。
【问题讨论】:
-
上面少了点东西;默认情况下,类例程都是私有的,因此您在上面编写的代码会发出与您发布的错误不同的错误...
-
正如@fbrereto 指出的那样,您的方法的可见性仅限于 A 类,B 和 C 都不会继承它们。
-
我认为作者只是快速拼凑了一些代码。它们当前位置的 ... 也会引发编译器错误
-
我怀疑这是一个设计决定:假设第二个函数中的 float 参数是可选的 [即virtual void Start(float a = 3) {};] 那么定义就会不明确
-
A中的所有函数都是私有的,所以编译器找不到。
标签: c++ function inheritance g++ virtual