2010-01-10 3 views
74

Couper à la poursuite j'ai recréé mon problème car il est assez explicite.Erreur de compilation avec: switch, "expression attendue avant"

cette satisfait sans erreur:

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

cette compile avec l'erreur et il manque seulement le NSLog():

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

il renvoie une erreur à la compilation "expression est attendue avant 'NSString' "

Est-ce qu'il me manque quelque chose ici?

+0

Voir johne

+0

Je me souviens d'une instruction switch/cas avec une erreur similaire, il utilisé pour disparaître lorsque j'ajoute un commentaire quelque part dans le bloc de cas .. Magic –

Répondre

154

En C normal, vous devez l'entourer entre parenthèses dans les deux cas. Je soupçonne que cela peut résoudre votre problème:

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

Voir this SO question pour plus d'informations.

Une autre façon de contourner ce problème consiste à mettre une instruction entre l'étiquette de cas et la première déclaration comme vous l'avez fait dans votre exemple de travail ci-dessus. Voir les commentaires et la réponse de Quinn Taylor pour plus d'informations.

+0

Intéressant. N'a pas essayé l'approche de support. – Eimantas

+0

Oui, cela résout le problème. Je courais juste avec le remplissage de code de xcode qui ne les utilise pas. Merci. – Ross

+0

J'ai rencontré ce problème avant, je l'ai résolu en utilisant {} moi-même, bon de voir que c'était la bonne solution. +1 pour vous Dan. –

20

Vous ne pouvez pas déclarer une variable en tant que première instruction dans un case sans crochets et dans de nombreux autres contextes dans les langages C. Voir Declaring variables inside a switch statement pour plus de détails.

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: 
Questions connexes