백준 문제를 풀던 중 case문에서 에러가 발생했다.
뭔가 낯이 익다는 생각이 들었는데 알고보니 컴파일러 과제할 때 마주했던 에러였다. 생각난 김에 벨로그에 기록을 남긴다.
위 에러가 발생한 코드의 일부를 가져왔다.
for(int i=0; i<f_len; i++){
switch(formula[i]){
case '+':
long long prev = calc.top();
calc.pop();
calc.push(prev + num);
num = 0;
break;
case '-':
calc.push(num);
num = 0;
break;
default :
num = num*10 + (formula[i]-'0');
break;
}
}
여기에서 문제가 되는 건 아래 부분이다.
case '+':
long long prev = calc.top();
switch의 case문 안에서는 변수 선언을 함부로 할 수 없다. 밖에서 선언한 변수를 사용하거나, 내부에서 선언할 경우에는 block
으로 묶어줘야한다. 아래처럼!
for(int i=0; i<f_len; i++){
switch(formula[i]){
case '+':
{
long long prev = calc.top();
calc.pop();
calc.push(prev + num);
num = 0;
break;
}
case '-':
calc.push(num);
num = 0;
break;
default :
num = num*10 + (formula[i]-'0');
break;
}
}
묶어주면 더 이상 에러창이 나타나지 않는다.
해당 문제는 풀이를 수정하는 바람에 block
은 지울 수 있었다. 머쓱(´・ω・`)
끝✌