我正在尝试使用模板来实现链表。我需要实现运算符<,>和=以比较包含在列表节点中的键。我在测试类中重载了运算符,但是当尝试在列表中使用它时,出现以下错误:
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();
}
现在,我的问题是:这是我应该重载运算符的地方还是应该在类节点中?为什么?感谢您的帮助