error: jump to case label [-fpermissive]
case 라벨은 코드 흐름의 특정 지점을 나타내며, 이 지점으로 점프할 수 있습니다.
이로 인해 해당 지점까지 도달하기 전에 변수 초기화가 이루어질 수 없게 되거나, 이미 초기화된 변수를 올바르게 사용할 수 없는 경우가 발생할 수 있습니다.
즉, case 라벨이 있는 코드 블록에서 변수를 정의하고 초기화하면, 이 변수가 case 라벨로 점프하는 다른 코드 블록에서 초기화되지 않은 상태로 사용될 수 있기 때문에 컴파일 에러가 발생했습니다.
switch (someValue) {
case 1:
// 변수 선언 및 초기화
int x = 10;
// 변수 사용
std::cout << x << std::endl;
break;
case 2:
// x는 이 지점에서 정의되지 않았으므로 컴파일 오류 발생
std::cout << x << std::endl;
break;
}
문제 발생 해결을 위해선 switch scope 밖에서 변수를 선언하여 모든 case에서 해당 변수를 사용 할 수 있도록 해야합니다.
// 변수 선언 및 초기화
int x = 0;
switch (someValue) {
case 1:
// 변수 사용
x = 10;
std::cout << x << std::endl;
break;
case 2:
std::cout << x << std::endl;
break;
}
break를 걸었기 때문에 상관 없을 것이라 생각했는데...
"공부하자!"