Как использовать функцию в классе A из класса D без наследования класса A и (хотя я понимаю, что это плохая практика, мне вообще не разрешено изменять наследование) и не удалять наследование из C и B в D? Я не могу найти способ обойти запрос участника является неоднозначной ошибкой. Я был (ошибочно) от понимания, что независимо от того, как далеко
class A
{
public:
void DoEverything(int){ }
};
class B : public A
{
public:
...
};
class C : public A
{
public:
...
};
class D : public C : public B
{
public:
...
};
int main()
{
D dMan;
int i = 2;
dMan.DoEverything(i);
}
Мой пример свободно основан на примере «Неоднозначные базовые классы (только C ++)», найденном здесь: http://publib.boulder.ibm.com/infocenter/comphelp/v8v101/topic/com.ibm.xlcpp8a.doc/language/ref/cplr138.htm#cplr138 но это не помогло мне понять проблему.
Прежде всего, чтобы это работало, просто внесите следующие изменения
класс B: виртуальная публика A
…
класс C: виртуальная публика A
Эта проблема в множественном наследовании называется проблемой алмазов. Проверьте эту ссылку, чтобы узнать больше
http://www.cprogramming.com/tutorial/virtual_inheritance.html
Других решений пока нет …