2017-12-23 29 views
0

클래스의 다른 푸시 및 팝 함수에서 'arr'변수에 액세스 할 수 없습니다. " 'arr'오류가이 범위에서 선언되지 않았습니다." 클래스 내부에서 액세스 할 수 있어야합니다. 정적으로 메모리를 솔루션으로 할당 할 수는 있지만 시도해보고 싶었습니다.클래스 내의 다른 함수에서 같은 클래스의 변수에 액세스 할 수 없습니다.

프로그램은 역 폴란드어 표기법을 제공합니다.
입력
1
(a + b)
O/P
AB +

#include <iostream> 
#include <string> 
using namespace std; 


class stackOperations{ 
    private: 
    int top = -1 ; 
    public: 
    void allocate(int len){ 
    char *arr = new char[len] ; 
    } 
    void deallocate(){ 
    delete []arr ; 
    } 
    void push(char x){ 
     top++; 
     arr[top] = x ; 
    } 
    char pop() 
    { 
     char temp; 
     temp = arr[top]; 
     top--; 
     return temp; 
    } 
}; 

void RPN(string exp) 
{ 
    stackOperations st ; 
    int len = exp.length(); 
    st.allocate(len); 
    for(int i=0; i <=len; i++){ 
     char tmp ; 
     tmp = exp[i]; 
     if(tmp=='('){ 
      st.push('('); 
     } 
     else if(tmp==')'){ 
      char y = st.pop(); 
      while(y != '('){ 
       cout << y ; 
       y = st.pop(); 
       } 
      } 
     else if(int(tmp) >= 97 && int(tmp) <= 122) { 
      cout << tmp ; 
     } 
     else { 
      st.push(tmp); 
     } 

    } 
    st.deallocate(); 
} 

int main() { 
    int test ; 
    string exp ; 
    cin >> test; 
    cin.ignore(); 
    while(test!=0){ 
     getline(cin, exp); 
     RPN(exp); 
     cout << endl ; 
     test--; 
    } 
    return 0; 
} 
+1

'arr' 클래스의 멤버 임시 변수 아니다 – Vivick

+0

대부분의 코드 너 게시 된 내용은 부적절합니다. [mcve]를 게시하는 것이 좋습니다. – juanchopanza

+2

@Vivick : 문자 그대로의 의미에서 일시적이지만 일반적으로 표현식 평가에서 생성 된 이름이없는 객체에 대해서는이 용어를 사용합니다. 대신에 지역 변수 *라고 말할 수 있습니다. –

답변

0
class stackOperations{ 
    private: 
      int top = -1 ; 
      char *arr; 
    public: 
     void allocate(int len){ 
      arr = new char[len] ; 
    } 
+0

은 noob 형식 오류를 사과합니다 – newbie

+1

형식을 확실히 수정해야하지만 OP 코드가 작동하지 않는 이유와 변경 사항이 수정되는 이유를 설명하여 응답을 향상시킬 수 있습니다. –

+0

나는 그것이 코드에서 분명하다고 생각했다. 그것은 단순히 arr의 선언을 메서드 할당에서 클래스 선언으로 옮긴다. – newbie