Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C++中使用结构为模板的单链表;_C++_C++11 - Fatal编程技术网

在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>&'