2012-06-16 6 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; 
      }   
}; 

나는 다른 상황 때이 오류 MSG 쇼까지를 확인했지만, 나는 그들이이와 아무 상관이 없다 생각합니다.

답변

6

매개 변수 이름 data은 개체 멤버 이름 data을 함수 범위 내에 숨 깁니다. 그것을 참조하기 위해, 당신은 명시 적으로 this->data와 함께 자격을 :

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

가 또는 회원과 동일한 이름을 가지고 있지 이름 매개 변수 결과 (예 : 'M_'로 회원을 접두사로) 식별자 이름 지정 체계의 일종을 사용 .