Я пытаюсь реализовать класс List с помощью указателей и пытаюсь реализовать функцию LOCATE (T x), где T для шаблона, и возвращает первую позицию элемента x, если он найден, иначе возвращает последнюю позицию + 1.использовать операторы в шаблонах в C++
Мои функции код
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 станд :: оператор == (Const станд :: istreambuf_iterator < _Elem, _Traits> &, Const станд :: istreambuf_iterator < _Elem, _Traits> &)': не может вывести аргумент шаблона для «сопзЬ станд :: 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;
Вы можете разместить код узла? – rlbond
Как выглядит ваше определение узла? И полный код вызова, который начинается с «List myList;», как указано выше? Спасибо. –
Только что отправил определение Node и вызывающий код –
Jaelebi