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

时间:2013-08-29 17:06:27

标签: c++ vector switch-statement

这是代码,当我添加其他案例或deafult时,我会收到几个错误。我找不到任何基本错误,如缺少分号左右,当我只有一个案例时代码正常工作。我通过切换教程搜索,但我没有发现任何关于向量和切换语句混合是一个问题。

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 << "\n" << "User... What r u doin... User... STAHP!" << endl;
    }
    cout << "\n" << "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 个答案:

答案 0 :(得分:13)

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

switch(n) 
{
case 1:
    {
        std::vector<int> foo;
        // ...
        break;
    }
case 2:
    // ...
default:
    // ...
}

额外范围限制了矢量对象的生命周期。如果没有它,跳转到大小写2将跳过对象的初始化,但是后来必须将其销毁,这是非法的。