关于c ++:在switch语句中使用向量时出现“跳转到大小写标签”错误。

“Jump to case label” error when using vectors inside switch statement.

本问题已经有最佳答案,请猛点这里访问。

这是代码,当我添加另一个案例或一个死亡案例时,我会得到几个错误。我找不到任何基本错误,比如分号丢失之类的,当我只有一个案例时,代码可以正常工作。我通过开关教程进行了搜索,但我没有发现任何关于向量和开关语句混合的问题。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
int main()
{
int r;
while (cin >> r)
{
    switch (r)
    {
       case 3:
    int y = 0;
    cout <<"Please enter some numbers, and I will put them in order." << endl;
    vector<int> nums;
    int x;
    while(cin >> x)
    {
        nums.push_back(x);
        y++;
    }
    sort(nums.begin(), nums.end());
    int z = 0;
    while(z < y)
    {
        cout << nums[z] <<",";
        z++;
        if(z > 23)
            cout <<"
"
<<"User... What r u doin... User... STAHP!" << endl;
    }
    cout <<"
"
<<"You entered"<< nums.size() <<" numbers." << endl;
    cout <<"Here you go!" << endl;
    break;

    //In the following line I get the"jump to case label" error.
    //I use Dev C++ software.

       case 4:
    cout <<"it works!!!" << endl;
    break;
    }
}
system ("PAUSE");
return 0;
}

我错过了什么?


在案例中添加另一个范围:

1
2
3
4
5
6
7
8
9
10
11
12
13
switch(n)
{
case 1:
    {
        std::vector<int> foo;
        // ...
        break;
    }
case 2:
    // ...
default:
    // ...
}

额外的范围限制了向量对象的生存期。如果没有它,跳转到case 2将跳过对象的初始化,尽管之后必须销毁对象,但这是非法的。