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

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

1 ответ

Решение

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

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

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

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

Другие вопросы по тегам