我在父级 class 中有一个变量 b,当我尝试从 sum3 class 访问变量 b 时,它显示了不明确的 b 错误

I have a variable b in parent class and when i try to access variable b from sum3 class it shows ambiguous b error

我在父 class 中有一个变量 b,当我尝试从 sum3 class 访问变量 b 时,它显示了一个不明确的 b 错误。如果我从继承中删除总和,它将给出“clas.cpp|25|错误:'int sum::b' 在此上下文中不可访问|”错误怎么办?

#include<iostream>
using namespace std;

class sum
{

public:
int b=8;
};

class sum2:sum
{
public:
 int c=4;

};

class sum3:sum2,sum
{
 public:
int h=9;
 void add()
   { 
    int l;
    l=h+c+b;
    cout<<l;
   }
};

int main()
{
  sum3 c;
  c.add();
 }

你需要写

class sum2 : virtual sum

class sum3 : sum2, virtual sum

这样你在sum2sum3中只有一个b,所以避免了歧义。

更多详情请见 In C++, what is a virtual base class?

这是因为你继承自 sum2sum classes 但 sum2 继承自 sum 所以它继承了变量 b 同样,当您打算在 class sum3 中使用变量 b 时,编译器不知道哪个你想要的变量,因为 class sum2 中有一个,class sum 中有一个同名 b.

其中一个解决方案是在 class sum3 中使用范围解析运算符,如下所示:

    class sum3:sum2,sum
{
 public:
int h=9;
 void add()
   { 
    int l;
    l=h+c+sum2::b;
    cout<<l;
   }
};

这通过告诉编译器我打算使用哪个变量来消除歧义,在本例中它是 sum2 变量。

注意:

这称为菱形问题,它发生在多重继承情况下,如果您想进一步阅读并知道如何避免它们,您可以使用此 link:How can I avoid the Diamond of Death when using multiple inheritance?