наследование — Понимание того, как решать неоднозначные запросы членов в переполнении стека

Как использовать функцию в классе 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 но это не помогло мне понять проблему.

0

Решение

Прежде всего, чтобы это работало, просто внесите следующие изменения

класс B: виртуальная публика A

класс C: виртуальная публика A

Эта проблема в множественном наследовании называется проблемой алмазов. Проверьте эту ссылку, чтобы узнать больше
http://www.cprogramming.com/tutorial/virtual_inheritance.html

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]