2010-01-10 6 views
74

체이스로 잘라 내 자신의 문제를 재현했습니다.다음과 같은 컴파일 오류 : switch, "before expected expression"

switch (n) { 
    case 1: 
     NSLog(@""); 
     NSString *aStr; 
     break; 
    default: 
     break; 
    } 

이 오류로 컴파일하고 그것은 단지 NSLog()을 실종 :

switch (n) { 
    case 1: 
     NSString *aStr; 
     break; 
    default: 
     break; 
    } 

이 컴파일시 에러가 발생합니다 "예상 표현

이 오류없이 준수 before 'NSString' "

여기에 뭔가가 빠졌습니까?

+0

참조 johne

+0

을 나는 비슷한 오류와 스위치/case 문을 기억하고, 그것을 케이스 블록 어딘가에 코멘트를 추가하면 사라졌습니다. Magic –

답변

154

일반적인 C에서는 두 경우 모두 대괄호로 묶어야합니다. 문제가 해결 될 것으로 판단됩니다.

case 1: 
{ 
    NSLog(@""); 
    NSString *aStr; 
    break; 
} 

자세한 내용은 this SO question을 참조하십시오.

이 문제를 해결하는 또 다른 방법은 위의 작업 예제에서 수행 한 것처럼 사례 레이블과 첫 번째 선언 사이에 문을 넣는 것입니다. 자세한 내용은 Quinn Taylor의 의견 및 의견을 참조하십시오.

+0

흥미 롭습니다. 브래킷 접근법을 시도하지 않았습니까? – Eimantas

+0

예 이렇게하면 문제가 해결됩니다. 나는 그들을 사용하지 않는 xcode의 코드 채우기로 실행 중이었습니다. 감사. – Ross

+0

전에이 문제를 보았습니다. {}을 사용하여 해결했습니다. 올바른 해결책이라고 생각합니다. +1 댄. –

2
case 0: { 
    Loading my nib file; 
    break; 
} 
case 1: { 
    Loading another nib file; 
    break; 
} 
Note that if you don't have an assignment (x = y) right after the case it won't be a problem. For example: 
관련 문제