[英]+= 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.