我已经制作了一个基本的链表,该列表最初是整数,我试图将列表更改为模板类。
我的节点类名为TLLNode
,
TLLNODE.h
#pragma once
template<class T>
class TLLNode{
friend class TLL;
public:
TLLNode(T data);typedef TLLNode<T>* TLLPtr;
private:
TLLNode<T> data;
TLLNode *next;
};
template<class T>
TLLNode<T>::TLLNode(T dataIn) : data(dataIn){
}
template<class T>
using TLLNode<T>* TLLPtr;
我的列表类初始化和实现我的函数称为TLL
TLL.h
#pragma once
#include <iostream>
#include"TLLNode.h"
using std::cout;
using std::endl;
template<class T>
class TLL{
public:
TLL();
TLL(const TLL&);
void insert(T);
void display();
~TLL();
private:
TLLPtr head;
TLLPtr newNode;
TLLPtr curr;
int size;
};
template<class T>
TLL<T>::TLL() : head(NULL), size(0){
}
// Not implemented yet
template<class T>
TLL<T>::TLL(const TLL& obj){
}
template<class T>
void TLL<T>::insert(T data){
if (head == NULL)
head = new TLLNode(data);
else{
newNode = new TLLNode(data);
newNode->next = head;
head = newNode;
}
}
template<class T>
void TLL<T>::display(){
curr = head;
while (curr != NULL){
cout << curr->data << endl;
curr = curr->next;
}
}
template<class T>
TLL<T>::~TLL(){
while (head != NULL){
curr = head;
head = head->next;
delete curr;
}
}
当列表的类型为int时,我一直在使用typedef TLLNode* TLLPtr;
,但是模板的typedef似乎是非法的。
我尝试了几种不同的方式让它工作,并且无法获得任何解决方案,我遇到过这篇文章 using,我尝试使用此解决方案但没有成功,代码看起来与我想做的相同,禁止使用指针。
我还没有使用结构在该帖子中尝试旧解决方案。 这两种解决方案是否适用于我,如果没有,是否有替代方案?
我意识到除了我讨论的问题之外,我的代码中可能存在错误,我想尝试找出自己的错误,所以如果它不相关对我的问题或直接阻止我继续进行,当我到达它时我会弄明白。
答案 0 :(得分:1)
您应该按如下方式定义TLLPtr
:
template<class T>
using TLLPtr = TLLNode<T>*;
TLL
定义中的任何地方都使用TLLPtr<T>
而不只是TLLPtr
(并且还将TLLNode
更改为TLLNode<T>
)。
更新:我还注意到TLLNode<T> data;
中有TLLNode
。您无法定义具有类本身类型的类的成员,您可能需要T data;
。