2012-06-16 2 views
1

Я пытаюсь скомпилировать следующий код, но я получаю эту ошибку на указанной линиинедопустимого типа `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_»), что приводит к параметрам имен, не имеющих такое же имя, как члены ,

Смежные вопросы