4
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;

将使用哪个运算符“=”?

4

3 回答 3

8

您已经分配了指针而不是对象。只需将最后一条指令替换为: *a = b;

回答第二个问题:NULL可以在编译器中以不止一种方式定义(根据最新标准,作为整数0或文字nullptr)。指针也可以转换为其他类型的指针,但是将 a 传递给采用 a或 avoid*的重载函数可能会使编译器无法解析被调用的函数。int*long*

但是,如果您想避免 NULL,只需使用 makeoperator(B& b)代替。引用肯定指向一个对象。

于 2012-09-10T20:56:23.283 回答
5

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*在您的代码中毫无意义。

于 2012-09-10T20:59:41.837 回答
2

更改分配给 a 的语句:

*a = b;
于 2012-09-10T20:56:44.777 回答