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;