Почему в следующем классе есть виртуальная таблица? - PullRequest
6 голосов
/ 09 февраля 2010

Предположим, у меня следующая ситуация с наследованием алмазов:

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 поместить в vtbl D, но зачем вообще будет vtbl для D, если он не определяет свои собственные виртуальные функции?

1 Ответ

7 голосов
/ 09 февраля 2010

Вы наследуете классы, которые содержат виртуальные функции. Поэтому у вашего класса есть виртуальные функции. Это так просто.

...