使用模板类无法重载<运算符

时间:2019-06-17 18:42:15

标签: c++ class templates operator-overloading

我正在尝试使用模板来实现链表。我需要实现运算符<,>和=以比较包含在列表节点中的键。我在测试类中重载了运算符,但是当尝试在列表中使用它时,出现以下错误:

no match for 'operator <' (operand types are 'Node <Test>' and 'Node <Test>')

这是我的实现方式

Node.h

#ifndef NODOSIMPLE_H
#define NODOSIMPLE_H

template <class T>
class Node{
private:
    T data;
public:
    Node<T>* nxt;
    Node();
    Node(T, Node<T>* = nullptr);
    void setData(T);
    T getData();
};

template<class T>
Node<T>::Node(){
    data = T();
}

template<class T>
Node<T>::Node(T data, Node<T>* nxt){
    this->data = data;
    this->nxt = nxt;
}

template<class T>
void Node<T>::setData(T data){
    this->data = data;
}

template<class T>
T Node<T>::getData(){
    return data;
}

#endif // NODOSIMPLE_H

这是Lista.h中有问题的部分

List.h

template<class T>
void LinkedList<T>::insert(T datos){
    if(isEmpty())
        first = tail = new Node<T>(data);
    else{
        if(data < first->getData())  // Here is the error
            insertToHead(data);
        else if(data > tail->getData()) // Here too
            insertToTail(datos);
        else
            insertBetween(data, first->nex);
    }
}

最后,这是我的Test类的定义,在这里我重载了运算符<< / p>

Test.h

class Test{
private:
    int data1;
    int data2;
public:
    Test();
    Test(int, int);
    int getData1() const;
    void setData1(int);
    int getData2() const;
    void setData2(int value);
    bool operator <(DatoPrueba) const;
};

Test.cpp

bool Test::operator <(const Test comp) const{
    return dato1 < comp.getDato1();
}

现在,我的问题是:这是我应该重载运算符的地方还是应该在类节点中?为什么?感谢您的帮助

0 个答案:

没有答案