erança múltipla sem funções virtuais em c ++

Eu me deparei com o problema do diamante e encontrei soluções diferentes para casos diferentes com um único diamante. No entanto, não consegui encontrar uma solução para diamantes "encadeados".

De acordo com a estrutura: sim, eu quero ter várias classes básicas a cada momento, para que a herança virtual não seja uma solução (é chamada de diamante, então?). Eu também queria evitar as funções get / set para cada camada intermediária de um diamant

p   p
|   |
k   k
 \ /
  s

class parent { int val; };
class kid1 : public parent {};
class kid2 : public parent {};
class school : public kid1, public kid2 {};

Access val na classe pai agora funciona da seguinte maneira:

school* s = new school;
s->kid1::val=1; // works

Mas e o próximo diamante 'encadeado':

p   p   p   p
|   |   |   |
k   k   k   k
 \ /     \ /
  s       s
  |       |
  c       c
    \   /
      w

class country1 : public school {};
class country2 : public school {};
class world : public country1, public country2 {};

Acesso à val via:

world* w = new world;
w->country1::kid1::val=1; // error

resulta em

error: ‘kid1’ is an ambiguous base of ‘world’

Por quê? A rota para o valor não está bem definida?

questionAnswers(2)

yourAnswerToTheQuestion