Я пытаюсь реализовать класс List, используя указатели, и пытаюсь реализовать функцию LOCATE (T x), где T для шаблона и возвращает первую позицию элемента x, если найден, иначе возвращает последнюю позицию + 1.
Код моей функции
template<class T>
int List<T>::locate(T n) const
{
int size = end();
Node<T> * p = head_;
for (int i = 0; i < size; i++)
{
if (p->data() == n) // fails on this line
return i;
p = p->link();
}
return size; // if no match found
}
Я инициализирую свой список с T в виде строки как
List<string> myList;
но я получаю сообщение об ошибке
'bool std :: operator == (const std :: istreambuf_iterator <_Elem, _Traits> &, const std :: istreambuf_iterator <_Elem, _Traits> &)': не удалось получить аргумент шаблона для 'const std :: istreambuf_iterator <_Elem, _Traits> & 'from' std :: string
Почему возникает ошибка, хотя для строкового класса определен оператор '=='?
«
Код для узла:
template<typename T>
class Node
{
public:
// Constructors
Node();
Node(T d, Node<T> * l = NULL);
//Inspectors
T data() const;
Node<T> * link() const;
// Mutators
void data(T d); // assigns new value to Node
void link(Node<T> * l); // points this Node to a different one
// Destructor
~Node();
private:
Node<T> * link_;
T data_;
};
template<typename T>
T Node<T>::data() const
{
return data_;
}
template<typename T>
Node<T>* Node<T>::link() const
{
return link_;
}
Телефонный код
List<string> test;
test.add("abc");
cout << test.locate("abc") << endl;