78 votes

Erreur de compilation avec : switch, "expression attendue avant"

Coupe à l'essentiel, j'ai recréé mon problème tel qu'il est assez explicite.

cela compile sans erreur:

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

cela compile avec une erreur et il manque seulement le NSLog():

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

il lance une erreur à la compilation "Expression attendue avant 'NSString'"

Est-ce que j'ai oublié quelque chose ici?

161voto

Dan Olson Points 11210

En C normal, vous devriez enclore ceci entre parenthèses dans les deux cas. Je soupçonne que cela pourrait résoudre votre problème:

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

Voir cette question SO pour plus d'informations.

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

21voto

Quinn Taylor Points 29688

Vous ne pouvez pas déclarer une variable comme la première instruction dans un case sans crochets, et dans de nombreux autres contextes dans les langages basés sur C. Voir Déclaration de variables à l'intérieur d'une instruction switch pour plus de détails.

2voto

kiran kumar Points 444
cas 0: {
    Chargement de mon fichier nib;
    break; 
}
cas 1: {
    Chargement d'un autre fichier nib;
    break; 
}
Notez que si vous n'avez pas d'assignation (x = y) juste après le cas, ce ne sera pas un problème. Par exemple:

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X