Недопустимые типы `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;
             }           
};

Я проверил другие ситуации, когда эта ошибка появляется, но я думаю, что они не имеют к этому никакого отношения.

1 ответ

Решение

Имя параметра data скрывает имя члена объекта data в рамках функции. Чтобы сослаться на это, вы должны явно указать this->data:

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

В качестве альтернативы используйте какую-либо схему именования идентификаторов (например, добавление префиксов к элементам с помощью m_), что приводит к тому, что параметры имени не имеют того же имени, что и члены.

Другие вопросы по тегам