6

假设我有一个钻石继承情况如下:

class A{
    public: virtual void foo(){};
};
class B: public virtual A{
    public: virtual void foo(){};
};
class C: public virtual A{
    public: virtual void foo(){};
};
class D: B, C{};

最后一行产生了一个编译错误,引用了歧义。据我了解,问题在于编译器不知道将哪个 foo 放在 D 的 vtbl 中,但是如果 D 没有定义自己的任何虚函数,为什么还会有一个 vtbl 呢?

4

1 回答 1

7

您正在继承包含虚函数的类。因此,您的类具有虚函数。就这么简单。

于 2010-02-09T00:51:47.460 回答