疑问,template 模板相关。

template 模板相关,百度不到的error
想写一个BST模板类,但是一开始就出了问题,可是按道理这里应该不会出问题的。可能是c++版本的问题?代码如下:

template <typename T> using ListNodePosi = ListNode<T>*; 
template <typename T> struct ListNode { 
    T data; 
ListNodePosi<T> pred; //前驱
    ListNodePosi<T> succ; //后继
    ListNode() {} //针对header和trailer的构造
    ListNode(T e, ListNodePosi<T> p = NULL, ListNodePosi<T> s = NULL)
        : data(e), pred(p), succ(s) {} //默认构造器
    ListNodePosi<T> insertAsPred(T const& e); //前插入
    ListNodePosi<T> insertAsSucc(T const& e); //后插入
};

error是
别名模板类型 "ListNode *" 与 别名模板 "ListNodePosi" (已声明 所在行数:1) 的重新声明中 " *" 的上一个类型不兼容

ListNode 要先定义吧, using 在之后使用,下面是可以编译通过的

template <typename T> struct ListNode { 
    T data; 
    ListNode<T>* pred; //前驱
    ListNode<T>* succ; //后继
    ListNode() {} //针对header和trailer的构造
    ListNode(T e, ListNode<T>* p = NULL, ListNode<T>* s = NULL)
        : data(e), pred(p), succ(s) {} //默认构造器
    ListNode<T>* insertAsPred(T const& e); //前插入
    ListNode<T>* insertAsSucc(T const& e); //后插入
};

template <typename T> using ListNodePosi = ListNode<T>;

哦!原来如此,谢谢大佬!