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;
将使用哪个运算符“=”?
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;
将使用哪个运算符“=”?
您已经分配了指针而不是对象。只需将最后一条指令替换为:
*a = b;
回答第二个问题:NULL可以在编译器中以不止一种方式定义(根据最新标准,作为整数0或文字nullptr)。指针也可以转换为其他类型的指针,但是将 a 传递给采用 a或 avoid*的重载函数可能会使编译器无法解析被调用的函数。int*long*
但是,如果您想避免 NULL,只需使用 makeoperator(B& b)代替。引用肯定指向一个对象。
您operator=提供从 aB*到 a 的分配A。您的代码不提供从 aB*到 a的转换A*(如错误消息所示)。因此,a=NULL不会使用您提供的赋值运算符,因为a它是指针,而不是A. 您的代码允许从 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;
如果您想使用指针,将 a 分配B*给 an的唯一“有用”方法A*是如果一个B对象派生自A. 这似乎不是您正在做的事情,因此将 a 分配B*给 anA*在您的代码中毫无意义。
更改分配给 a 的语句:
*a = b;