我一直在尝试制作一个通用链表类来使用模板练习我的 C++。但是,在编译时我收到错误,我对如何解决它们一无所知。我花了 2 多小时试图调试一个错误,但完全无处可去。我还咨询了 MSDN 和 google,也没有得到任何结果。恐怕我在模板方面相当缺乏经验。我在下面列出了相关代码。如果有人可以帮助我,我将不胜感激。
链表.h:
#ifndef LINKED_LIST
#define LINKED_LIST
namespace D_DATA_STRUCT {
template <typename T>
class LinkedList {
private:
class LinkedListNode {
public:
T data;
LinkedListNode* next;
LinkedListNode(T data) {
this->data = data;
this->next = 0;
}
};
LinkedListNode* head;
LinkedListNode* tail;
public:
LinkedList();
~LinkedList();
void insert_at_head(T data);
void insert_at_tail(T data);
void insert(T data);
T remove_from_head();
T remove();
};
}
#include "LinkedListImplementation.h"
#endif
LinkedListImplementation.h:
namespace D_DATA_STRUCT {
template <typename T>
LinkedList<typename T>::LinkedList() {
this->head = 0;
this->tail = 0;
}
template<typename T>
LinkedList<typename T>::~LinkedList() {
LinkedListNode* prev, next;
for(prev = this->head; prev != 0; prev = prev->next) {
next = prev->next;
delete prev;
prev = next;
}
}
template<typename T>
void LinkedList<typename T>::insert_at_head(T data) {
LinkedListNode* temp = this->head;
this->head = new LinkedListNode(data);
this->head->next = temp;
if(temp == 0) {
this->tail = this->head;
}
return;
}
template<typename T>
void LinkedList<typename T>::insert_at_tail(T data) {
LinkedListNode* temp = new LinkedListNode(data);
if(this->head == 0) {
this->head = temp;
} else {
this->tail->next = temp;
}
this->tail = temp;
return;
}
template<typename T>
void LinkedList<typename T>::insert(T data) {
this->insert_at_head(data);
return;
}
template<typename T>
T LinkedList<typename T>::remove_from_head() {
if(this->head == 0) {
return 0;
}
LinkedListNode* temp = this->head;
T data = temp->data;
this->head = this->head->next;
delete temp;
if(this->head == 0) {
this->tail = 0;
}
return data;
}
template<typename T>
T LinkedList<typename T>::remove() {
return this->remove_from_head();
}
}
我得到的错误是:
linkedlistimplementation.h(4):错误 C2143:语法错误:缺少“;” 在“<”linkedlistimplementation.h(4) 之前:错误 C4430:缺少类型说明符 - 假定为 int。注意:C++ 不支持默认整数linkedlistimplementation.h(4):错误C2988:无法识别的模板声明/定义linkedlistimplementation.h(4):错误C2059:语法错误:'<'linkedlistimplementation.h(4):错误C2039: “LinkedList”:不是“全局命名空间”的成员linkedlistimplementation.h(10):错误C2588:“::~LinkedList”:非法全局析构函数linkedlistimplementation.h(10):致命错误C1903:无法从中恢复以前的错误;停止编译
即使“;”存在语法错误 当我错误地制作linkedlistimplementationlinkedlist.cpp时,程序编译但链接失败。因此,我认为我的模板语法存在一些问题。我浏览了很多文档并尝试了很多东西,但坦率地说,我迷路了,不知道发生了什么。我尝试在 LinkedList:: 中使用 typename 进行编译,但没有它。
我还在使用 Microsoft Visual C++ 2010 Express 编译器。
谢谢!