我有一个B类,它继承A级,我有一个C类,它继承B类和A类;
在A类中有一个名为"a“的变量,我必须在类D中访问它,但不能使用B类的分辨率运算符,例如d.B::a;
#include<bits/stdc++.h>
using namespace std;
class A{
public:
int a;
};
class B : public A{
public:
int b;
};
class D : public B, public A{
public:
int d;
};
int main() {
D d;
d.B::a = 1; // This is working correctly on this path class D -\> class B -\> class A
d.a = 2;
/*
But This line gives the following error
Non-static member 'a' found in multiple base-class subobjects of type 'A':
class D -> class B -> class A
class D -> class A
*/
return 0;
}
int main() {
D d;
d.D::a = 2; //This is not working correctly on this path class D -\> class A
d.A::a = 2; //This is not working correctly on this path class D -\> class A
//How do I use Scope Resolution to access variable "a" from second path ?!
return 0;
}发布于 2022-10-26 12:32:12
B已经从A继承,所以D只应该从B继承:
class A{
public:
int a;
};
class B : public A{
public:
int b;
};
class D : public B{
public:
int d;
};如果您有另一个继承自A的类C,并且希望D从B和C继承,那么您将拥有金刚石问题。然后,为了避免模棱两可,你应该写:
class A{
public:
int a;
};
class B : virtual public A{
public:
int b;
};
class C : virtual public A{
public:
int b;
};
class D : public B, public C{
public:
int d;
};发布于 2022-10-26 12:35:05
虚拟继承是解决问题的关键词。
试试这个:
#include<bits/stdc++.h>
using namespace std;
class A{
public:
int a;
};
class B : virtual public A{
public:
int b;
};
class D : public B, virtual public A{
public:
int d;
};
int main() {
D d;
d.B::a = 1; // This is working correctly on this path class D -\> class B -\> class A
d.a = 2;
std::cout << d.a;
/*
But This line gives the following error
Non-static member 'a' found in multiple base-class subobjects of type 'A':
class D -> class B -> class A
class D -> class A
*/
return 0;
} https://stackoverflow.com/questions/74207357
复制相似问题