繁体   English   中英

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

[英]+= 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_aa_b都是指针,因此必须取消引用它们才能使用运算符: *an_a += *a_b;

另请注意,您的operator+=通过非常量引用获取B 如果您将右手参数更改为该运算符,则某个时候某个人会感到非常惊讶和不高兴。 使其改为const引用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM