我重載兩個+和+ =運算符,具有以下特徵:+ =運算符重載,但使用不會編譯,因爲它看到一個簡單的+操作
// within A's header file..
A operator+(const B &p);
A &operator+=(B &p);
爲什麼,當我嘗試使用+ =運算符,我得到的編譯器錯誤消息的類型「A *」和 「B *」二進制「運營商+」
無效的操作數。
an_a; // an instance of class A
B *a_b = new B(some_parameters);
an_a += a_b;
即使取消引用它(an_a + =(* A_B))是錯誤的,雖然 – headch 2011-02-25 19:47:45
啊,對不起,我錯過了你的報告的錯誤消息,您的代碼段不同意。代碼中的註釋聲明'an_a'是類A的一個實例,但錯誤消息聲稱它不是,它是一個指針。你不能在兩邊都重載'operator + ='指針,所以如果兩個操作數都是指針,那麼我認爲'p1 + = p2'總是意味着'p1 = p1 + p2'。 – 2011-02-25 19:49:40
......反正或者,既沒有'P1 + = p2'不'P1 = P1 + p2'是有效的,你不能讓他們有效使用操作符重載。不過,我不知道爲什麼編譯器會以這種特殊的方式抱怨,而不是抱怨'operator + ='失敗。 – 2011-02-25 20:01:52