类模板中的Typedef指针

时间:2015-03-21 20:54:57

标签: c++ templates pointers typedef

我已经制作了一个基本的链表,该列表最初是整数,我试图将列表更改为模板类。

我的节点类名为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,我尝试使用此解决方案但没有成功,代码看起来与我想做的相同,禁止使用指针。

我还没有使用结构在该帖子中尝试旧解决方案。 这两种解决方案是否适用于我,如果没有,是否有替代方案?

我意识到除了我讨论的问题之外,我的代码中可能存在错误,我想尝试找出自己的错误,所以如果它不相关对我的问题或直接阻止我继续进行,当我到达它时我会弄明白。

1 个答案:

答案 0 :(得分:1)

您应该按如下方式定义TLLPtr

template<class T>
using TLLPtr = TLLNode<T>*;

TLL定义中的任何地方都使用TLLPtr<T>而不只是TLLPtr(并且还将TLLNode更改为TLLNode<T>)。

更新:我还注意到TLLNode<T> data;中有TLLNode。您无法定义具有类本身类型的类的成员,您可能需要T data;