我正在编写一个实现堆栈功能的程序。我的代码如下:

class StackOfNodees
{
private:
    Node<T>* m_top;
    int m_size;

public:
    StackOfNodees();
    bool isEmpty() const;
    int size() const;
    void push(T value);
    T pop();
};

Node.hpp
template<typename T>
Node<T>::Node()
{
    Node.setPrevious(nullptr);
    Node.setValue();
}

//initiation of getters
    template<typename T>
    T Node::getValue()
    {
        return m_value;
    }//end getValue

    template<typename int>
    int Node::getPrevious()
    {
        return m_previous;
    }//end getPrevious

//initiation of setters
    template<typename void>
    void Node::setValue(T value)
    {
        m_value =  value;
    }//end setValue

    template<typename void>
    void Node::setPrevious(Node<T>* previous)
    {
        Node<T>* previous = m_previous;
    }//end setPrevious

我得到错误:
‘T’ was not declared in this scope|

有人可以帮忙吗?同样,如果有人可以解释使用什么模板,那也很好。

最佳答案

就目前而言,StackOfNodes不知道什么是T。就编译器所知,T可以是任何东西。因此,您必须给StackOfNodes一个模板化类型T,以便它可以在类中引用它。

例如,代码将如下所示:

template<class T>
class StackOfNodes
{
 ... // code

};

即使Node具有类型T,但StackOfNodes却没有。在添加该模板化类型之前,编译器无法假定任何内容。一旦添加,代码应编译(关于提到T的错误)

关于c++ - 未在此范围内声明“T”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22239888/

10-11 18:03