2016-06-28 643 views
0

不知道为什么我得到此错误。该类中的所有功能都已定义。我试着把价值放在T里面,什么也没有发生。我不断收到此错误“错误C2955:使用类模板需要模板参数列表”错误C2955:使用类模板需要模板参数列表

template< class T > 
    class Stack { 
    public: 
     Stack(int = 10); // default constructor (stack size 10) 
     // destructor 
     ~Stack() { 
      delete[] stackPtr; 
     } 
     bool push(const T&); 
     bool pop(T&); 
     // determine whether Stack is empty 
     bool isEmpty() const { 
      return top == -1; 
     } 
     // determine whether Stack is full 
     bool isFull() const { 
      return top == size - 1; 
     } 
    private: 
     int size;  // # of elements in the stack 
     int top;  // location of the top element 
     T *stackPtr; // pointer to the stack 
    }; 
    // constructor 
    template< class T > 
    Stack<T>::Stack(int s) { 
     size = s > 0 ? s : 10; 
     top = -1; // Stack initially empty 
     stackPtr = new T[size]; // allocate memory for elements 
    } 
    template< class T > 
    bool Stack<T>::push(const T &pushValue) { 
     if (!isFull()) { 
      stackPtr[++top] = pushValue; 
      return true; 
     } 
     return false; 
    } 
    template< class T > 
    bool Stack<T>::pop(T &popValue) { 
     if (!isEmpty()) { 
      popValue = stackPtr[top--]; // remove item from Stack 
      return true; 
     } 
     return false; 
    } 

    int main() { 

     Stack s(); 

    } 
+6

你想's'是一个什么样的堆栈* *? –

+2

其实不是,你想'''*返回*一堆什么? –

回答

1

你需要决定你要在这里什么类型的堆栈。

Stack<int> s; 

这将形成一个堆栈,其中类型T是int。您也可以在这里使用其他类型。比方说你想要一堆花车。

Stack<float> s; 

+0

Jees不能相信我错过了...非常感谢你 –

+1

最令人头痛的解析。你没有在这里声明一个变量,而是一个函数。 –

+0

使用'Stack s;'使用默认的ctor创建s – doug