2010-01-10 25 views
74

Takip etmeyi kesinleştir, sorunumu oldukça kendiliğinden açıkladığı için yeniden oluşturdum.Derleme Hatası: anahtarı, "önce beklenen ifade" geçişi

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

bu hatayı ile derler ve sadece NSLog() eksik:

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

o derleme sırasında bir hata atar "Beklenen ifade

bu hatasız uyumludur 'NSString' önce "

Burada bir şey eksik miyim?

+0

bakınız johne

+0

Ben benzer bir hata ile bir switch/case deyimi hatırlamak, onu vaka bloğu içinde bir yere bir yorum eklediğimde ortadan kayboldu .. Magic –

cevap

154

Normal C'de bunu her iki durumda da parantez içine almanız gerekir. Bunun senin sorunu çözebilir şüpheli:

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

fazla bilgi için this SO question bakınız.

Bu sorunun üstesinden gelmenin başka bir yolu, yukarıdaki örnekte yaptığınız gibi vaka etiketi ile ilk bildirimin arasına bir açıklama koymaktır. Daha fazla bilgi için yorumları ve Quinn Taylor'un cevabını görün.

+0

İlginç. Braket yaklaşımını denemedim. – Eimantas

+0

Evet, bu sorunu giderir. Sadece onları kullanmayan xcode'un kod dolgusuyla çalışıyordum. Teşekkürler. – Ross

+0

Bu soruna daha önce rastladım, {} kendimi kullanarak çözdüm, doğru çözüm olduğunu görmek için iyi oldum. Senin için +1 Dan. –

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: