+ =运算符重载,但由于看到一个简单的+运算符,因此无法编译

0 c++ operator-overloading

我已经重载了+和+ =运算符,并带有以下签名:

// within A's header file..
A operator+(const B &p);    
A &operator+=(B &p);
Run Code Online (Sandbox Code Playgroud)

为什么当我尝试使用+ =运算符时,我收到编译器错误消息

"A*"和"B*"类型的操作数无效,二进制"operator +".

an_a; // an instance of class A
B *a_b = new B(some_parameters);
an_a += a_b;
Run Code Online (Sandbox Code Playgroud)

Ste*_*sop 5

你重载了运算符B&.你试图传递一个指针,而不是B的实例或B的引用.以下应该编译:an_a += *a_b;,虽然更可能的修复是:

A an_a(some parameters);
B a_b(some parameters);
an_a += a_b;
Run Code Online (Sandbox Code Playgroud)

还要注意动态分配和算术运算符重载不能很好地结合在一起.如果它只是动态分配的输入,那可能就好了.只是不要尝试分配的结果new并返回它作为一个指针,否则你会发现,为了避免内存泄漏调用代码不能使用任何人你想操作符重载的原因,简单的表达第一名.