重载>运算符以识别包含字符串

时间:2015-11-03 22:19:30

标签: c++ templates operator-overloading

我编写了一个模板化函数来查找两个变量之间的最大值。输入两个字符串时,它工作正常。然后我有一个创建" Nodes"包含一个字符串。我试图在类中编写一个overloader函数,以便>操作员识别这些节点。

这是我的模板化函数和我的Node类。正斜杠后面的行在尝试编译时抛出错误:

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

为什么不能&gt;运算符在我的get_data()函数上工作?

1 个答案:

答案 0 :(得分:2)

get_data()不是const成员函数,但相关的operator>需要const个引用。不能通过这些引用调用非const成员函数。您需要get_data()成为const成员:

string get_data() const { ....

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