class B;
class A{
B *b;
public:
void operator= (B *b){
this->b = b;
}
};
B *b = new B()
A *a = new A();
a = b;
我收到“无法将B*
转换为A*
”错误。
有办法解决这个问题吗?
现在,如果有办法,如果我使用类似的东西:
a = NULL;
将使用哪个运算符“=”?
答案 0 :(得分:8)
您已指定指针而不是对象。只需将最后一条指令替换为:
*a = b;
回答第二个问题:NULL可以在编译器中以多种方式定义(从最新标准开始,作为整数0
或文字nullptr
) 。指针也可以转换为其他类型的指针,但是将void*
传递给带有int*
或long*
的重载函数可能会使编译器无法解析被调用的函数。
但是,如果您想避免使用NULL,只需改为operator(B& b)
即可。引用肯定是指向一个对象。
答案 1 :(得分:5)
您的operator=
提供从B*
到A
的分配。您的代码未提供从B*
到A*
的转换(如错误消息所示)。因此,a=NULL
将不会使用您提供的赋值运算符,因为a
是指针,而不是A
。您的代码允许从B*
到A
进行分配,例如A a= new B();
。
如果您打算使用实际对象而不是指针,请从代码中删除所有*
:
class B{};
class A{
B b;
public:
void operator= (const B& b){ //pass non-primitives by const reference
this->b = b;
}
};
B b;
A a;
a = b;
如果您想使用指针,那么将B*
分配给A*
的唯一“有用”方法是B
对象派生自A
。这似乎不是您正在做的事情,因此将B*
分配给A*
对您的代码毫无意义。
答案 2 :(得分:2)
将您分配给a的语句更改为:
*a = b;