C++ C++;为什么我的链表模板类在创建包含链表的类的对象时失败?
我编写了这个LinkedList模板类,它还没有完成——我还没有添加安全特性和更多方法。到现在为止,它做了我需要的事情。但它在某种情况下失败了,我不知道为什么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) {} }
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中,此限制已被删除。这就解释了它(我知道浅拷贝,但这是我第一次遇到此问题)。我将去解决此问题,并记住下次:-)。谢谢您的帮助。这就解释了(我知道一些浅薄的拷贝,但这是我第一次遇到这个问题)。我会去解决这个问题,下次记住:-)。谢谢你的帮助。