2012-11-15 34 views
0

我想以某種方式爲我的模板Polynom類重載+=運算符,以便我可以同時使用Polynom和常量作爲參數。在Polynom類中重載+ =運算符以添加Polynoms和常量

我寫了一個構造函數和下面的操作我的類中:

Polynom(const T& num = 0) { 
    coefs.push_back(num); 
} 
friend Polynom& operator += (Polynom& lhs, const Polynom& rhs) { 
    ... 
} 

,它工作正常,我可以使用:poly += 1;。當編譯器遇到類似的事情時,它會做什麼?它認爲存在使用這些參數沒有+ =運算符:

(Polynom<int>& lhs, const int) 

但有一個:

(Polynom<int>& lhs, const Polynom& rhs) 

所以,它試圖const int轉換爲const Polynom&?它使用構造函數,對吧?但爲什麼當添加一個常量時這個聲明不工作:

Polynom& operator += (Polynom& rhs) { 
    ... 
} 

編譯器說「不匹配operator + =」。

+2

您的成員'operator + ='應該可能帶有'const Polynom&'參數。 –

回答

3

當傳遞一個int採取一個const Polynom&一個函數,編譯器是能夠從int,然後將其結合到const Polynom&參數構建的臨時Polynom對象。但是,Polynom&參數不會發生這種情況,因爲臨時參數不能綁定到非常量參考。

+0

我發現這個:http://stackoverflow.com/questions/1565600。這解釋了我的問題,對吧?這是一個規則,我不能將一個非const引用綁定到臨時對象。 – grozhd

+0

@grozhd是它只是標準中的一個規則。這些答案更詳細地解釋了它 –

0

您需要向我們展示模板代碼或演示此問題的最小可編譯代碼。

嘗試創建一個接受整型參數的方法:

friend Polynom& operator+=(const Polynom& lhs, int constant); 

我感到困惑的符號Polynom<int>這表明你Polynom類是一個模板。