Я пытаюсь создать связанный список для хранения информации об ученике, с учащимся такая структура:
struct Student
{
int id;
string name;
//etc
};
У меня есть два шаблона для узла и списка с базовой функцией:
template <class T>
struct Node {
T data;
Node <T> *pNext;
Node () : pNext(NULL) {}
Node (T &a) : data(a), pNext(NULL) {}
};
template <class T>
class LinkedList
{
Node <T> *Head;
size_t lSize;
public:
LinkedList(): Head(NULL), lSize(0) {}
~LinkedList();
void linsert(T& a);
};
С помощью linsert () для вставки нового узла в начало списка:
template <class T>
void LinkedList<T>::linsert(T& a)
{
if (Head==nullptr)
Head=a;
else
{
a->pNext=Head;
Head=a;
}
lSize++;
}
Для тестирования: я попытался создать новые узлы и связать ихвручную (без использования связанного списка), и все, кажется, работает нормально:
Node <Student> *s1 = new Node <Student>;
s1->data.id=1;
s1->data.name="Anna";
Node <Student> *s2 = new Node <Student>;
s2->data.id=2;
s2->data.name="Bob";
s1->pNext=s2;
Node <Student> *s3 = new Node <Student>;
s3->data.id=3;
s3->data.name="James";
s2->pNext=s3;
Вот проблема: я попытался создать новый связанный список и использовать linsert () для добавленияновые студенты в списке с простым циклом for:
LinkedList <Node<Student>> *l=new LinkedList <Node<Student>>;
for (int=0; i<10; i++)
{
Node <Student> *s = new Node <Student>;
s->data.id=i;
s->data.name="Name";
l->linsert(s);
}
При компиляции я получаю это сообщение об ошибке, указывающее на строку
l->linsert(s);
error: no matching function for call to 'LinkedList<Node<Student> >::linsert(Node<Student>*&)'
note: candicate: void LinkedList<T>::linsert(T&) [With T=Node<Student>]
note: no known conversion from argument 1 from 'Node<Student>*' to 'Node<Student>&'
У меня всегда возникают проблемы с использованием указателяи ссылка, так что после хорошего часа, ничего не придумав, я сдался.Пожалуйста, помогите мне решить эту проблему.
Я использую CodeBlock, и если я смогу улучшить эти коды, буду признателен, если вы мне расскажете.