我在父级 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
这样你在sum2
和sum3
中只有一个b
,所以避免了歧义。
更多详情请见 In C++, what is a virtual base class?
这是因为你继承自 sum2
和 sum
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?
我在父 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
这样你在sum2
和sum3
中只有一个b
,所以避免了歧义。
更多详情请见 In C++, what is a virtual base class?
这是因为你继承自 sum2
和 sum
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?