Ваша диаграмма наследования выглядит примерно так:
Concrete
|
D
/ \
C B
/ \
A A
Когда вы пытаетесь преобразовать свой Concrete*
в A*
, компилятор понятия не имеет, какой экземпляр A
ты хочешь. Вы хотите конвертировать в A
что C
происходит от или A
что B
происходит от?
Решение состоит в том, чтобы использовать виртуальное наследование, чтобы получить B
а также C
из A
, так что есть только один экземпляр A
.
Concrete
|
D
/ \
C B
\ /
A