C++ C++;为什么我的链表模板类在创建包含链表的类的对象时失败?

C++ C++;为什么我的链表模板类在创建包含链表的类的对象时失败?,c++,oop,templates,linked-list,dynamic-allocation,C++,Oop,Templates,Linked List,Dynamic Allocation,我编写了这个LinkedList模板类,它还没有完成——我还没有添加安全特性和更多方法。到现在为止,它做了我需要的事情。但它在某种情况下失败了,我不知道为什么 template<class data_type> class LinkedList { private: struct Node { data_type data; Node* prev; Node* next; Node() : prev(NULL), next(NULL) {} }

我编写了这个LinkedList模板类,它还没有完成——我还没有添加安全特性和更多方法。到现在为止,它做了我需要的事情。但它在某种情况下失败了,我不知道为什么

template<class data_type> class LinkedList {
private:
    struct Node {
    data_type data;
    Node* prev;
    Node* next;
    Node() : prev(NULL), next(NULL) {}
};
Node* head;
Node* GetLastNode() {
    Node* cur = head;
    while (cur->next != NULL)
        cur = cur->next;
    return cur;
}
public:
LinkedList() {
    head = new Node;
    head->prev = head;
    head->next = NULL;
}
LinkedList(LinkedList<data_type> &to_copy) {
    head = new Node;
    head->prev = head;
    head->next = NULL;
    for (int i = 1; i <= to_copy.NumberOfItems(); i++) {
        this->AddToList(to_copy.GetItem(i));
    }
}
~LinkedList() {
    DeleteAll();
    delete head;
    head = NULL;
}
void AddToList(const data_type data) {
    Node* last = GetLastNode();
    Node* newnode = last->next = new Node;
    newnode->prev = last;
    newnode->data = data;
}
void Delete(const unsigned int position) {
    int currentnumberofitems = NumberOfItems();
    Node* cur = head->next;
    int pos = 1;
    while (pos < position) {
        cur = cur->next;
        pos++;
    }
    cur->prev->next = cur->next;
    if (position != currentnumberofitems)
        cur->next->prev = cur->prev;
    delete cur;
}
void DeleteAll() {
    Node* last = GetLastNode();
    Node* prev = last->prev;

    while (prev != head) {
        delete last;
        last = prev;
        prev = last->prev;
    }
    head->next = NULL;
}
data_type GetItem(unsigned int item_number) {
    Node* cur = head->next;
    for (int i = 1; i < item_number; i++) {
        cur = cur->next;
    }
    return cur->data;
}
data_type* GetItemRef(unsigned int item_number) {
    Node* cur = head->next;
    for (int i = 1; i < item_number; i++) {
        cur = cur->next;
    }
    return &(cur->data);
}
int NumberOfItems() {
    int count(0);
    Node* cur = head;
    while (cur->next != NULL) {
        cur = cur->next;
        count++;
    }

    return count;
}
};
模板类链接列表{
私人:
结构节点{
数据类型数据;
节点*prev;
节点*下一步;
Node():prev(NULL),next(NULL){}
};
节点*头;
节点*GetLastNode(){
节点*cur=头部;
while(cur->next!=NULL)
cur=cur->next;
返回电流;
}
公众:
LinkedList(){
头=新节点;
头部->上一个=头部;
head->next=NULL;
}
LinkedList(LinkedList和to_副本){
头=新节点;
头部->上一个=头部;
head->next=NULL;
对于(int i=1;i AddToList(to_copy.GetItem(i));
}
}
~LinkedList(){
DeleteAll();
删除标题;
head=NULL;
}
void AddToList(常量数据\类型数据){
Node*last=GetLastNode();
节点*newnode=last->next=new节点;
newnode->prev=last;
新建节点->数据=数据;
}
无效删除(常量无符号整数位置){
int currentnumberofitems=NumberOfItems();
节点*cur=head->next;
int pos=1;
while(位置<位置){
cur=cur->next;
pos++;
}
当前->上一个->下一个=当前->下一个;
如果(位置!=currentnumberofitems)
当前->下一步->上一步=当前->上一步;
删除cur;
}
void DeleteAll(){
Node*last=GetLastNode();
节点*prev=last->prev;
while(上一个!=头部){
最后删除;
最后=上一个;
上一个->上一个;
}
head->next=NULL;
}
数据类型GetItem(无符号整数项编号){
节点*cur=head->next;
对于(int i=1;i<项目编号;i++){
cur=cur->next;
}
返回cur->data;
}
数据类型*GetItemRef(无符号整数项目编号){
节点*cur=head->next;
对于(int i=1;i<项目编号;i++){
cur=cur->next;
}
返回&(cur->data);
}
int NumberOfItems(){
整数计数(0);
节点*cur=头部;
while(cur->next!=NULL){
cur=cur->next;
计数++;
}
返回计数;
}
};
我在问题中陈述了我的问题,下面是一个例子:

class theclass {
public:
    LinkedList<int> listinclass;
};

void main() {
    LinkedList<theclass> listoftheclass;
    theclass oneclass;
    oneclass.listinclass.AddToList(5);
    listoftheclass.AddToList(oneclass);
    cout << listoftheclass.GetItem(1).listinclass.GetItem(1);
}
class类{
公众:
LinkedList listinclass;
};
void main(){
类的链接列表;
一类;
oneclass.listinclass.AddToList(5);
AddToList类的列表(oneclass);

cout您需要实现赋值运算符。问题从该函数开始:

void AddToList(const data_type data) {
    Node* last = GetLastNode();
    Node* newnode = last->next = new Node;
    newnode->prev = last;
    newnode->data = data; <---------------------------- Right there
}
void AddToList(常量数据\u类型数据){
Node*last=GetLastNode();
节点*newnode=last->next=new节点;
newnode->prev=last;

newnode->data=data;您需要实现一个赋值运算符。问题从这个函数开始:

void AddToList(const data_type data) {
    Node* last = GetLastNode();
    Node* newnode = last->next = new Node;
    newnode->prev = last;
    newnode->data = data; <---------------------------- Right there
}
void AddToList(常量数据\u类型数据){
Node*last=GetLastNode();
节点*newnode=last->next=new节点;
newnode->prev=last;

newnode->data=data;在C++03中,本地类不能作为模板参数。将类
移到
main
之外,它就会工作


在C++0x中,此限制已被删除。

在C++03中,本地类不能作为模板参数。将
移到
之外,它就会工作

在C++0x中,此限制已被删除。

这就解释了它(我知道浅拷贝,但这是我第一次遇到此问题)。我将去解决此问题,并记住下次:-)。谢谢您的帮助。这就解释了(我知道一些浅薄的拷贝,但这是我第一次遇到这个问题)。我会去解决这个问题,下次记住:-)。谢谢你的帮助。