首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从“D类”对象访问“A类”的变量"a“

如何从“D类”对象访问“A类”的变量"a“
EN

Stack Overflow用户
提问于 2022-10-26 11:57:18
回答 2查看 37关注 0票数 0

我有一个B类,它继承A级,我有一个C类,它继承B类和A类;

在A类中有一个名为"a“的变量,我必须在类D中访问它,但不能使用B类的分辨率运算符,例如d.B::a;

代码语言:javascript
复制
#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;
}
EN

回答 2

Stack Overflow用户

发布于 2022-10-26 12:32:12

B已经从A继承,所以D只应该从B继承:

代码语言:javascript
复制
  class A{
       public:
           int a;
  };

  class B : public A{
        public:
            int b;
  };

  class D : public B{
        public:
            int d;
  };

如果您有另一个继承自A的类C,并且希望D从B和C继承,那么您将拥有金刚石问题。然后,为了避免模棱两可,你应该写:

代码语言:javascript
复制
  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;
  };
票数 0
EN

Stack Overflow用户

发布于 2022-10-26 12:35:05

虚拟继承是解决问题的关键词。

试试这个:

代码语言:javascript
复制
#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;

} 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74207357

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档