我遇到了钻石问题,并为单个钻石的不同情况找到了不同的解决方案。但是我找不到“链式”钻石的解决方案。
根据结构:是的,我希望每次都有多个基类,所以虚拟继承不是一个解决方案(它甚至被称为钻石吗?)。我还想避免对钻石的每个中间层使用 get/set-functions。
p p
| |
k k
\ /
s
class parent { int val; };
class kid1 : public parent {};
class kid2 : public parent {};
class school : public kid1, public kid2 {};
在父类中访问 val 现在的工作方式如下:
school* s = new school;
s->kid1::val=1; // works
但是下一个“链式”钻石呢:
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 {};
通过以下方式访问 val:
world* w = new world;
w->country1::kid1::val=1; // error
结果是:
error: ‘kid1’ is an ambiguous base of ‘world’
为什么?通向价值的途径不是很明确吗?