我已经重载了+和+ =运算符,并带有以下签名:
// 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)
你重载了运算符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并返回它作为一个指针,否则你会发现,为了避免内存泄漏调用代码不能使用任何人你想操作符重载的原因,简单的表达第一名.