web-dev-qa-db-fra.com

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

Coup sur coup, j'ai recréé mon problème car il est assez explicite.

cela est conforme sans erreur:

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

cela compile avec erreur et il ne manque que le NSLog ():

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

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

Est-ce que j'ai râté quelque chose?

77
Ross

Dans le C normal, vous devez placer ces informations 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 cette 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.

159
Dan Olson

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

20
Quinn Taylor
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:
2
kiran kumar