C++ 模板<;T类>&引用;错误:。。。。不为类型命名";

C++ 模板<;T类>&引用;错误:。。。。不为类型命名";,c++,templates,types,C++,Templates,Types,你好,我有一个模板的问题。我想要一个使用模板的指针堆栈,但我得到错误“不命名类型”。我有两个类,一个管理一堆节点,另一个是节点类。问题在node类中,我不知道如何解决它。有人能给我解释一下如何使用另一个类中声明的模板创建节点对象吗。代码如下 template<class T> class PointerStack { public: PointerStack(); bool isEmpty(); bool pus

你好,我有一个模板的问题。我想要一个使用模板的指针堆栈,但我得到错误“不命名类型”。我有两个类,一个管理一堆节点,另一个是节点类。问题在node类中,我不知道如何解决它。有人能给我解释一下如何使用另一个类中声明的模板创建节点对象吗。代码如下

    template<class T> class PointerStack
    {
    public:
        PointerStack();
        bool isEmpty();
        bool push(T dataIn);
        bool pop();
        bool top(T &topItem);
        void clear();
        void print();
    private:
        int counter;
        Node<T>* start;
};

template<class T>
class Node
{
    public:
        Node(T dataIn);
        Node(T dataIn, Node vorigeIn);
        T getData();
        Node* getPrevious();
    private:
        T data;
        Node* previous;
        Node* next;
};


template<class T>
PointerStack<T>::PointerStack()
{
    counter == 0;
}

template<class T>
bool PointerStack<T>::isEmpty()
{
    if(counter == 0)
    {
        return true;
    }
    else
    {
        return false;
    }
}

template<class T>
bool PointerStack<T>::push(T data)
{
    if(isEmpty())
    {
        start = new Node<T>(data);
        counter++;
        return true;
    }
    else
    {
        Node<T> dummy = start;
        start = new Node<T>(data, dummy);
        counter++;
        return true;
    }
}

template<class T>
bool PointerStack<T>::pop()
{
    if(isEmpty())
    {
        return false;
    }
    else
    {
        Node<T> dummy = start;
        start = start->vorige;
        counter--;
        delete dummy;
        return true;

    }
}

template<class T>
bool PointerStack<T>::top(T &topItem)
{
    if(isEmpty())
    {
        return false;
    }
    else
    {
        topItem = start.getData();
        return true;
    }
}

template<class T>
void PointerStack<T>::clear()
{
    while(isEmpty())
    {
        pop();
    }
}

template<class T>
void PointerStack<T>::print()
{
    Node<T> dummy = start;
    if(!isEmpty())
    {
        for(int i = 0; i < counter; i++)
        {
            std::cout<<dummy->getData();
            dummy->v;

        }
    }
}

template<class T>
Node<T>::Node(T dataIn)
{
    data = dataIn;
    previous = NULL;
    next = NULL;
}

template<class T>
Node<T>::Node(T dataIn, Node previousIn)
{
    data = dataIn;
    previous = previousIn;
    next = NULL;
    previousIn->volgende = this;

}

template<class T>
T Node<T>::getData()
{
    return data;
}

template<class T>
Node<T>*  Node<T>::getPrevious()
{
    return previous;
}
模板类指针堆栈
{
公众:
PointerStack();
bool是空的();
bool-push(T-dataIn);
bool-pop();
bool top(T和topItem);
无效清除();
作废打印();
私人:
整数计数器;
节点*启动;
};
模板
类节点
{
公众:
节点(T-dataIn);
节点(T dataIn,节点vorigeIn);
T getData();
节点*getPrevious();
私人:
T数据;
节点*先前;
节点*下一步;
};
模板
PointerStack::PointerStack()
{
计数器==0;
}
模板
boolpointerstack::isEmpty()
{
如果(计数器==0)
{
返回true;
}
其他的
{
返回false;
}
}
模板
bool PointerStack::push(T数据)
{
if(isEmpty())
{
开始=新节点(数据);
计数器++;
返回true;
}
其他的
{
节点虚拟=开始;
开始=新节点(数据,虚拟);
计数器++;
返回true;
}
}
模板
bool PointerStack::pop()
{
if(isEmpty())
{
返回false;
}
其他的
{
节点虚拟=开始;
开始=开始->开始;
计数器--;
删除虚拟;
返回true;
}
}
模板
bool PointerStack::top(T&topItem)
{
if(isEmpty())
{
返回false;
}
其他的
{
topItem=start.getData();
返回true;
}
}
模板
void PointerStack::clear()
{
while(isEmpty())
{
pop();
}
}
模板
void PointerStack::print()
{
节点虚拟=开始;
如果(!isEmpty())
{
对于(int i=0;ivolgende=此;
}
模板
T节点::getData()
{
返回数据;
}
模板
Node*Node::getPrevious()
{
返回上一个;
}
这是错误消息:
在此处输入图像描述“>

您的PointerStack类不知道节点类。您需要在声明PointerStack之前向前声明您的节点类:

template<class T>
class Node;
/* Your code goes here */
模板
类节点;
/*你的密码在这里*/

您需要在定义模板类之前声明
模板类节点;
,然后
PointerStack
将知道
Node
是一种类型。