Pertanyaan Mengkompilasi Kesalahan dengan: beralih, "ekspresi yang diharapkan sebelum"


Dipotong untuk mengejar saya telah menciptakan kembali masalah saya karena itu cukup jelas.

ini sesuai tanpa kesalahan:

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

ini dikompilasi dengan kesalahan dan itu hanya kehilangan NSLog ():

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

itu melempar kesalahan saat kompilasi "Ekspresi yang diharapkan sebelum 'NSString'"

Apakah saya kehilangan sesuatu di sini?


75
2018-01-10 11:25


asal


Jawaban:


Dalam C normal Anda harus melampirkan ini dalam tanda kurung dalam kedua kasus. Saya menduga ini dapat memperbaiki masalah Anda:

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

Lihat pertanyaan SO ini untuk info lebih lanjut.

Cara lain untuk mengatasi masalah ini adalah dengan menempatkan pernyataan antara label kasus dan deklarasi pertama seperti yang Anda lakukan dalam contoh kerja Anda di atas. Lihat komentar dan jawaban Quinn Taylor untuk info lebih lanjut.


155
2018-01-10 11:28



Anda tidak dapat mendeklarasikan variabel sebagai pertama pernyataan dalam case tanpa tanda kurung, dan dalam banyak konteks lain dalam bahasa berbasis-C. Lihat Mendeklarasikan variabel di dalam pernyataan switch untuk detailnya.


20
2018-01-10 16:08



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
2018-01-20 06:44