Недопустимые типы `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_), что приводит к тому, что параметры имени не имеют того же имени, что и члены.