2015-11-06 46 views
-1

我有一个简单的Node类,它创建节点并可以访问这些节点内的字符串。为了能够比较节点(> overloader)并打印其数据(< < overloader),该类中有两个运算符重载函数。还有内置的max()函数的模板副本。我的两个操作员超载工作正常,除非我尝试以两个节点作为参数打印max()函数的返回值。这里是我的代码:在函数的返回值上使用运算符时,运算符重载函数不起作用

#include <iostream> 
#include <vector> 
using namespace std; 

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() const { 
     return this->data; 
    } 

    friend ostream& operator << (ostream& os, Node& a){ 
     return os << a.get_data(); 
    } 

    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; 
}; 

int main() { 

    double d1 = 0.1, d2 = 0.2; 
    cout << maximum(d1, d2) << endl; 

    string s1 = "woody", s2 = "buzz"; 
    cout << maximum(s1, s2) << endl; 

    Node a("buzz"), b("woody"); 
    cout << maximum(a, b) << endl; 

    return 0; 
} 

问题出在main()函数的最后一行。我的编译器会引发错误消息,类似的东西cannot bind ostream<char> value to ostream<char>&&

回答

1

添加constoperator<<秒参数:

friend ostream& operator << (ostream& os, const Node& a){ 
              ^^^^^