57 votes

Puis-je déclarer des variables dans une instruction switch Objective-C?

Je pense que je vais devenir aveugle, car je ne peux pas savoir où se trouve l'erreur de syntaxe dans ce code:

 if( cell == nil ) {
    titledCell = [ [ [ TitledCell alloc ] initWithFrame:CGRectZero
    	reuseIdentifier:CellIdentifier ] autorelease
    ];

    switch( cellNumber ) {
    	case 1:
    		NSString *viewDataKey = @"Name";
etc...
 

Lorsque j'essaie de le compiler, j'obtiens un jeton Erreur: erreur de syntaxe avant le jeton '*' sur la dernière ligne.

Désolé pour une question aussi fondamentale, mais que me manque-t-il?

74voto

ephemient Points 87003

Je n'ai pas un Objectif souhaitable d'-compilateur C sous la main, mais aussi longtemps que le C constructions sont identiques:

switch { … } vous donne un domaine de niveau bloc, pas un pour chaque case. La déclaration d'une variable n'importe où autre que le début de la portée est illégal, et à l'intérieur d'un switch est particulièrement dangereux en raison de son initialisation peut être sauté par-dessus.

Procédez de la façon suivante résoudre le problème?

NSString *viewDataKey;
switch (cellNumber) {
    case 1:
        viewDataKey = @"Name";
    …
}

switch (cellNumber) {
    case 1: {
        NSString *viewDataKey = @"Name";
        …
    }
    …
}

20voto

Chuck Points 138930

Vous ne pouvez pas déclarer une variable au début d'une instruction case. Faire d'un cas de test qui est qui et vous obtiendrez la même erreur.

Il n'a pas à faire avec les variables doivent être déclarées au moyen d'un bloc - même d'adopter une norme qui permet de ne pas faire de GCC accepter une déclaration au début d'une instruction case. Il semble que GCC considère le cas de l'étiquette dans le cadre de la ligne et donc ne permettent pas à une déclaration.

Une solution simple est juste de mettre un point-virgule au début de l'affaire, de sorte que la déclaration n'est pas au début.

4voto

Aragorn Points 504

En C, vous pouvez uniquement déclarer des variables au début d'un bloc avant toute instruction non déclarée.

 {
   /* you can declare variables here */

   /* block statements */

   /* You can't declare variables here */
}
 

En C ++, vous pouvez déclarer des variables là où vous en avez besoin.

1voto

Novelocrat Points 12126

Ne pourrait-il pas être valide pour déclarer une variable dans un bloc de commutation?

0voto

lin zheng Points 44

Comment résoudre l'avertissement: 1.Inside one ';' dans la première ligne de votre bloc de cas 2.Mettez les codes à l'intérieur des accolades

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