我正在尝试使用Bottom对象访问struct Top中的成员变量x.
代码如下:
#include <cstdio>
struct Top
{
public:
int x = 1;
};
struct Left : public Top
{
int x = 2;
};
struct Right : public Top
{
int x = 3;
};
struct Bottom : public Left, public Right
{
int x = 4;
};
int main()
{
Bottom b;
std::printf("value: %d\n", b.Left::Top::x);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这使用gcc 4.8给出以下错误:
main.cpp: In function 'int main()':
main.cpp:27:45: error: 'Top' is an ambiguous base of …Run Code Online (Sandbox Code Playgroud) 考虑这个(完全非荒谬,但完全有效)类继承:
struct Area { int size; };
struct Pattern { int size; };
struct R : Area, Pattern {};
struct C : Area, Pattern {};
struct X: R , C {};
Run Code Online (Sandbox Code Playgroud)
让我们看一下这个伟大层次结构的图表:
Area Pattern
|\ /|
| \/ |
| /\ |
|/ \|
R C
\ /
\/
X
Run Code Online (Sandbox Code Playgroud)
现在,如果我没有弄错的话,X应该有4个size成员.
如何使用范围运算符引用它们?
显而易见的解决方案不起作用:
X x;
x.R::Area::size = 24;
Run Code Online (Sandbox Code Playgroud)
铿锵声:
Run Code Online (Sandbox Code Playgroud)23 : <source>:23:3: error: ambiguous conversion from derived class 'X' to base class 'Area': struct X -> …