2015-05-10 84 views
-11
friend Fraction operator=(const Fraction &newfraction) { 

    Fraction changedfraction; 

    changedfraction.numerator = newfraction.numerator; 
    changedfraction.denominator = newfraction.denominator; 

    changedfraction.simplify(changedfraction.numerator, 
          changedfraction.denominator); 
    return (changedfraction); 
} 
+10

**什麼**錯誤? –

+2

這是一個賦值運算符的非正則版本。賦值運算符只應該做一件事,一件事就是創建一個傳入的對象到一個現有對象的副本。它不應該執行諸如「簡化」的「業務邏輯」。 – PaulMcKenzie

+0

@PaulMcKenzie:我不同意。如果我們假設「簡化」不會在語義上改變正在分配的「值」,只是優化它的表示,那麼調用它就絕對沒問題。這就像'std :: string'在'swap'上修剪它的容量。它不是「業務邏輯」(討厭這個詞!)。 OP函數的真正問題在於它是一個非成員操作符,它僅僅佔用一個操作數,甚至不會將任何東西分配給應該是LHS操作數的東西。 –

回答

3

帶簽名Fraction operator=(const Fraction &newfraction)的賦值運算符必須是成員函數。 A friend功能不是會員。所以參數的數量與賦值所需的數量不匹配。刪除friend並確保它被聲明爲成員函數。

struct Fraction 
{ 
    Fraction& operator=(const Fraction &newfraction) { .... } 
    .... 
}; 

另請注意,傳統上賦值運算符返回對*this的引用,而不是值。

+0

非常感謝你juan。我解決了錯誤,但是當我從main調用它時,它會給我一些任意的數字。我不能採取正確的結果 – Can

+0

@可以你的實現必須是越野車然後。 – juanchopanza

相關問題