簡體   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