在C++中使用结构为模板的单链表;
我试图创建一个链表来存储学生的信息,学生是这样一个结构:在C++中使用结构为模板的单链表;,c++,c++11,C++,C++11,我试图创建一个链表来存储学生的信息,学生是这样一个结构: 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),
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);
};
我总是在使用指针和引用时遇到问题,所以在一个小时没有弄清楚任何东西后,我放弃了。请帮我解决这个问题
我正在使用CodeBlock,如果我能对上述代码进行任何改进,如果您能告诉我,我将不胜感激。您的linsert实现不正确。它应该将一个学生作为输入,并为其创建一个新节点。您试图在linsert之外创建节点并将其传入,这不是使用链表类的正确方法。节点管理应该保持在类内部
请尝试以下方法:
样板
无效链接列表::linsertT&a
{
节点*n=新节点a;
n->pNext=头部;
水头=n;
++lSize;
}
链接列表l;
对于int i=0;i<10;我++
{
学生证;
s、 id=i;
s、 名称=名称;
l、 林塞茨;
}
您的linsert实现不正确。它应该将一个学生作为输入,并为其创建一个新节点。您试图在linsert之外创建节点并将其传入,这不是使用链表类的正确方法。节点管理应该保持在类内部
请尝试以下方法:
样板
无效链接列表::linsertT&a
{
节点*n=新节点a;
n->pNext=头部;
水头=n;
++lSize;
}
链接列表l;
对于int i=0;i<10;我++
{
学生证;
s、 id=i;
s、 名称=名称;
l、 林塞茨;
}
LinkedList注意T是如何应用于LinkedList的节点成员的,它不应该只是LinkedList吗?不相关:LinkedList*l=new LinkedList;可能是也可能应该是LinkedList l;LinkedList注意T是如何应用于LinkedList的节点成员的,它不应该只是LinkedList吗?不相关:LinkedList*l=new LinkedList;可能是也可能应该是LinkedList l;
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;
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>&'