[英]+= operator overloaded, but use won't compile since it sees a simple + operator
我已经用以下签名重载了+和+ =运算符:
// within A's header file..
A operator+(const B &p);
A &operator+=(B &p);
为什么当我尝试使用+ =运算符时,出现编译器错误消息
二进制“ operator +”类型为“ A *”和“ B *”类型的无效操作数。
an_a; // an instance of class A
B *a_b = new B(some_parameters);
an_a += a_b;
您使B&
的运算符超载。 您正在尝试将其传递给指针,而不是B的实例或对B的引用。应编译以下内容: an_a += *a_b;
,尽管更可能的解决方法是:
A an_a(some parameters);
B a_b(some parameters);
an_a += a_b;
还要注意,动态分配和算术运算符重载不能一起很好地发挥作用。 如果仅动态分配输入,则可能很好。 只是不要尝试使用new
分配结果并将其作为指针返回,否则您会发现,为了避免内存泄漏,调用代码不能使用任何简单的表达式,而这正是您想要运算符重载的原因首先。
您的错误消息与代码中的注释不一致。 看起来an_a
和a_b
都是指针,因此必须取消引用它们才能使用运算符: *an_a += *a_b;
。
另请注意,您的operator+=
通过非常量引用获取B
如果您将右手参数更改为该运算符,则某个时候某个人会感到非常惊讶和不高兴。 使其改为const
引用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.