Herencia múltiple sin funciones virtuales en c ++
Me encontré con el problema del diamante y encontré diferentes soluciones para diferentes casos con un solo diamante. Sin embargo, no pude encontrar una solución para los diamantes 'encadenados'.
Según la estructura: sí, quiero tener varias clases base cada vez, por lo que la herencia virtual no es una solución (¿se llama incluso diamante entonces?). También quería evitar las funciones get / set para cada capa media de un diamante.
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 en la clase padre ahora funciona de la siguiente manera:
school* s = new school;
s->kid1::val=1; // works
Pero, ¿qué pasa con el próximo diamante 'encadenado':
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 {};
Accediendo val a través de:
world* w = new world;
w->country1::kid1::val=1; // error
resultados en:
error: ‘kid1’ is an ambiguous base of ‘world’
¿Por qué? ¿No está bien definida la ruta al valor?