2012-06-16 79 views
1

我試圖編譯下面的代碼,但我得到這個錯誤在指定的行無效的類型`INT [INT]」數組下標

「無效的類型`INT [INT]」數組標「

代碼:

template<typename T> 
class Stack { 
     private: 
       static const int GROW_FACTOR = 2; 
       static const int START_LENGHT = 10; 

       T * data; 
       int max; 
       int used; 

       void allocateIfNeeded() { 
        if (used == max) { 
         T * aux = new T[max*GROW_FACTOR]; 
         for (int i=0; i<max; i++) { 
          aux[i] = data[i]; 
         } 
         max *= GROW_FACTOR; 
         delete[] data; 
         data = aux; 
        } 
       } 
     public: 
      Stack() {  
       max = START_LENGHT; 
       data = new T[max]; 
       used = 0; 
      } 

      void push(T data) { 
       allocateIfNeeded(); 
       data[used++] = data; // <-- compile error 
      } 

      T pop() { 
       return data[--used]; 
      } 

      T top() { 
       return data[used-1]; 
      } 

      bool isEmpty() { 
        return used == 0; 
      }   
}; 

我已經檢查了其他情況下,這種錯誤味精展現出來的時候,但我認爲他們什麼都沒有做與此有關。

回答

6

參數名稱data隱藏對象成員名稱data範圍內的函數。要引用它,你必須明確地this->data限定它:

 void push(T data) { 
      allocateIfNeeded(); 
      this->data[used++] = data; // <-- compile error 
     } 

或者使用某種類型的標識符命名方案(如前綴成員「M_」)導致不具有相同的名稱作爲成員名稱參數。

相關問題