相关疑难解决方法(0)

使用多重继承时,为什么这个限定名称不明确?

我正在尝试使用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)

c++ inheritance multiple-inheritance

8
推荐指数
1
解决办法
199
查看次数

超多非虚拟继承中基类的作用域运算符

考虑这个(完全非荒谬,但完全有效)类继承:

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)

铿锵声:

23 : <source>:23:3: error: ambiguous conversion from derived class 'X' to base class 'Area':
    struct X -> …
Run Code Online (Sandbox Code Playgroud)

c++ multiple-inheritance

5
推荐指数
1
解决办法
110
查看次数

标签 统计

c++ ×2

multiple-inheritance ×2

inheritance ×1