2015-03-19 58 views
0

我一直試圖在我的程序中使用運算符重載,但是我一直在遇到問題。運算符超載的問題

基本上,我有一個二叉搜索樹,我試圖得到它,所以如果你輸入「tree = tree + 7」之類的東西,它會將鍵值7添加爲一個節點。我一直在與代碼嘗試做到這一點:

struct addToTree { 
    string treeName; 
    int value; 
    string output; 

    string operator+(string addToTree &lhs, int addToTree &rhs) { 
     addToTree temp; 
     temp.output = lhs.treeName + to_string(rhs.value); 
     return temp.output; 
    } 
}; 

目前,我只是試圖讓它拿樹的名稱,並添加到該值是在用戶輸入要添加到那個樹。

我目前收到一些錯誤,我不認爲我的代碼甚至接近它應該如此,如果任何人可以給我建議,告訴我我應該做什麼,那將是非常感激。

+0

'int addToTree%rhs'?顯示你的真實代碼。您的'operator +'顯示爲返回一個'addToTree',但它顯然返回了一個'string'。這是真的嗎?還是隻是另一個錯字? – 2015-03-19 10:50:50

+0

這應該是&rhs,但我不知道這是否更有意義,它應該返回一個字符串用於測試目的。我現在修好了。 – user3746428 2015-03-19 10:52:26

+1

這種操作符重載幾乎總是有害的。您的操作員應該具有與標準版本相同的語義,否則您和任何後來查看您代碼的人都會遇到一些頭疼的錯誤。 「做整數做」 – TartanLlama 2015-03-19 10:53:07

回答

0

operator +是一個二元運算符,意味着它獲得2個參數作爲操作數。 你可以實現它的free函數或成員函數

爲成員函數,它只有一個參數,要添加的元素:

returnValue SomeClass::operator + (const SomeType& addee); 

在上面的例子中,第一個加入的元素是總是包含+運算符的對象。

免費功能,增加了兩個參數 - 這兩個元素你想總結一下:

returnValue operator + (const SomeType1& addee1, const SomeType2& addee2); 

在這裏,你混成員函數語法(例如1)具有獨立功能(例如2) 你需要你的成員重載只有1個參數(或實現它作爲獨立函數)。

另外,行(string addToTree &lhs, int addToTree &rhs) 在語法上是錯誤的string addToTree &lhs是什麼意思?這是一個字符串嗎?這是別的嗎?表達式string addToTree沒有意義,因爲它不代表任何類型