分配虚拟多重继承的对象

时间:2014-05-07 09:43:03

标签: c++ multiple-inheritance virtual-inheritance

我有一个问题,即分配具有多重继承的相同对象,这也有钻石问题。这是我项目的骨架代码。

H.h

 class H
 {
     protected: 
        int a;
        int b;
        int c;     
     public:
        H();
        H(int a);
        //Setter and getters    
 }; 

Y.h

 class Y : virtual H
 {
      public:
          Y();
          Y(int a);

  };

D.h

  class D : virtual H
  {
      public:
          D();
          D(int a);

  };

An.h

  class An : Y , D
  {

     public:
         An();
         An(int a);
  };

我想将一个An对象分配给另一个。但我收到此错误:错误C2582:'an'中的'operator ='功能不可用 我搜索谷歌但没有发现任何东西。我正在使用Visual Studio 2010

适用于Y或D或H之类的:

 int main()
 {
     Y *a = new Y[4];
     Y *b = new Y[4];
     a[0] = b[0];//this is not the problem
 }

Main.cpp的

 int main()
 {
     An *a = new An[4];
     An *b = new An[4];
     a[0] = b[0];//this is the problem
 }

我该如何解决这个问题。 提前谢谢。

2 个答案:

答案 0 :(得分:0)

你是说这个吗?

 An *a = new An(3);
 An *b = new An(4);
 a = b;//this is not a problem

在你的程序中,

AN *a = An(3); // not possible

不合适,因为lhs是An *而rhs是An 以下情况也很好:

 An a = An(3);
 An b = An(4);
 a = b;

答案 1 :(得分:0)

我找到了solution。代码应该是这样的:

 class A {
   private:
        A& operator=(const A& a){}
 };

 class B : public A {
    public:
       // try the following line to resolve the error
       // void operator=(const B& b){}
 };

  int main() {
    B b1;
    B b2;
    b1 = b2;   // C2582
 }

定义

 void operator=(const B& b){}

进入An类公开。问题解决了。