Предположим, что у меня есть ромбовидная ситуация с наследованием следующим образом:
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{};
Последняя строка приводит к неоднозначности цитирования ошибки компиляции. Насколько я понимаю проблема состоит в том, что компилятор не знает, какое нечто поместить в D vtbl, но почему там даже был бы vtbl для D то, если это не определяет собственных виртуальных функций?
Вы наследуете классы, содержащие виртуальные функции. Следовательно, в вашем классе есть виртуальные функции. Это так просто.