Я пытаюсь выполнить следующие классы:C++ Multiple и виртуальное наследование
class a {
public :
//...
f();
//...
};
class b : virtual public a {
public :
//...
f();
//...
}
class c : virtual public a {
public :
//...
f();
//...
}
class d : virtual public c {
public :
//...
f();
//...
}
class e : public b, public d {
public :
//...
}
но компилятор говорит мне, что запрос функции члена F() является неоднозначным. Я хочу, чтобы 'e' наследовал от f() версии 'd' (так что 'c'), но код компилируется, только если я переработал f() в 'e'. Таким образом, я могу скомпилировать, только если я закодировать «е» конструктор следующим образом:
e::e(...) : a(...), c(...), b(...), d(...)
{
}
Что кажется нелогичным для меня, так как «D» inherate из «с» и «B» будет построен первым.
+1 - использование d :: f; 'является хорошим вариантом. Третий способ заключается в добавлении 'void f() {d :: f(); } 'to' class e' - здесь не обязательно, но иногда полезно при изменении аргументов, входе в журнал добавлено и т. д. –
Просто потому, что я не понимаю, почему компилятор хотел, чтобы я построил конструктор в этом конкретном порядке, поскольку , на мой взгляд, b должен был быть построен первым. Спасибо за ваш ответ, но я буду использовать метод «использования». – Kernael