2016-06-28 48 views
0

なぜこのエラーが発生するのかわかりません。クラス内のすべての関数が定義されています。私はTの中にも値を入れようとしましたが、何も起こりませんでした。私はこのエラーを受信し続ける:あなたがここに持ってしようとしているスタックの種類を決定する必要がありエラー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

「エラーC2955クラステンプレートを使用すると、テンプレート引数リストが必要です」。

Stack<int> s; 

これは、タイプTがintであるスタックを作成します。ここでも他のタイプを使うことができます。浮動小数点数の積み重ねが必要だと言うことができます。

Stack<float> s; 

+0

私はそれを逃した知性がない...非常にありがとう –

+1

最も厄介な解析。ここでは変数を宣言しておらず、関数を宣言しています。 –

+0

'Stack s;'を使ってデフォルトのctorを使って作成する – doug

関連する問題