2015-11-03 63 views
0

我已經寫了一個模板函數來查找兩個變量之間的最大值。當輸入兩個字符串時它工作正常。然後我有一個創建包含字符串的「節點」的類。我正在嘗試在類中編寫一個overloader函數,以便>運算符可以識別這些節點。Overloading>運算符來識別包含字符串的節點

這是我的模板函數和我的節點類。向前以下行斜槓是扔在編譯的時候出現錯誤:

template<typename T> 
T maximum(const T& a, const T& b){ 
    return a > b ? a : b; 
} 

class Node{ 
public: 
    Node(const string& s = "Default"): 
     data(s){ 

    } 

    string get_data(){ 
     return this->data; 
    } 

    friend ostream& operator<<(ostream& os, vector<Node> &v){ 
     for(int i = 0; i < v.size(); i++){ 
      os << v[i].get_data() << ", "; 
     } 
     cout << endl; 

     return os; 
    } 

    friend bool operator>(const Node& a, const Node& b){ 
///////////////////////////////////////////////////////////////////// 
     if(a.get_data() > b.get_data()){ 
      return true; 
     } 
     else return false; 
    } 

private: 
    string data; 
    Node* next; 
}; 

爲什麼不能在我的GET_DATA()函數>操作員的工作量?

+0

您正在調用const引用的非const函數。將get_data函數更改爲'string get_data()const {return this-> data; }'。 BTW發佈你將來得到的錯誤信息。 –

+0

我知道這是來自錯誤消息的consts問題,但我甚至沒有想到get_data函數。我是C++的新手,發現編譯器錯誤很難理解。謝謝。 – KOB

+0

@KOB此外,C++程序員這樣做的方式是重載'operator <'和'operator ==',並根據這兩者編寫其他運算符。 – PaulMcKenzie

回答

2

get_data()不是const成員函數,但相關的operator>需要const引用。非const成員函數不能通過這些引用來調用。你需要讓get_data()一個const成員:

string get_data() const { .... 

此外,使用std::max,而不是推出了自己最大的功能。