我有一个问题,即分配具有多重继承的相同对象,这也有钻石问题。这是我项目的骨架代码。
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
}
我该如何解决这个问题。 提前谢谢。
答案 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类公开。问题解决了。