2014-03-06 15 views
0

我有一個操作符重載的小錯誤,它一直在困擾着我。運算符在C++中重載(小錯誤)

我有一個類:

class Fraction{ 

private: 

//Variables 

    int numerator; 
    int denominator; 

//Constructor 



public: 

//Methods 

    Fraction(); 
    Fraction(int, int); 
}; 

我也有這個操作符重載函數:

Fraction& operator+=(const Fraction& f); 

看起來這將建立沒什麼問題,但是編譯器是給我這個錯誤信息:

In file included from Fraction.cpp:3: 
./Fraction.h:31:11: error: overloaded 'operator+=' must be a binary operator 
     (has 1 parameter) 
Fraction& operator+=(const Fraction& f); 
     ^
1 error generated. 

每一個+ =的例子我到目前爲止見過的與我所見過的一樣,盡我所能,盡我所能。如果有人能指出我的愚蠢,那會很棒!

+2

把這個函數放在分數類裏 – pippin1289

回答

2

要麼將​​運算符聲明爲該類的成員函數,要麼將其作爲非類函數聲明, WO參數

例如

1成員函數

class Fraction 
{ 

private: 

//Variables 

    int numerator; 
    int denominator; 

//Constructor 



public: 

//Methods 

    Fraction(); 
    Fraction(int, int); 
    Fraction& operator +=(const Fraction &rhs); 
}; 

2。非成員函數

class Fraction 
{ 

private: 

//Variables 

    int numerator; 
    int denominator; 

//Constructor 



public: 

//Methods 

    Fraction(); 
    Fraction(int, int); 
    friend Fraction& operator +=(Fraction &lhs, const Fraction &rhs); 
}; 

Fraction& operator +=(Fraction &lhs, const Fraction &rhs) { /* some code */ } 

要考慮到那麼運營商是一個非類函數,你可以不使用這個 也非一流運營商應該是類的友元函數,如果有沒有通過獲取者和設置者公開訪問相應的數據成員。

+0

非常感謝你的深入答案。我也這麼想。雖然我現在正在鏈接錯誤,但至少現在我知道我正走在正確的軌道上。感謝大家和歡呼! – suitegamer

1

你應該把

Fraction& operator+=(const Fraction& f); 

聲明中類,如果它是二元運算。或者你可以聲明該運營商在全局命名空間中取的Fraction兩個實例,但要朋友這個類的(因爲它需要訪問私人數據)通過聲明友誼Fraction通過:

friend Fraction& operator+=(Fraction& l, const Fraction& r); 
0

要定義免費函數,它應該有2個參數(二元運算符)。 而是在Fraction類中聲明它。

0

如果你超載運營商作爲一個非成員函數,你需要你的時候重載運算符是你的類全球外面把它寫這樣

Fraction& operator+=(const Fraction& lhs, const Fraction& rhs); 
0

這種錯誤發生。

你應該嘗試給該運營商的聲明到類爲:

Fraction& operator+=(const Fraction& f); 

您可以留下爲你做但你必須改變運營商這樣的:

Fraction& operator+=(const Fraction& f, const Fraction& g); 

Here你可以找到在我的文章中的一些更多信息