5

This is the code, where I get several errors, when I add the other case or a deafult. I can't find any basic error like a missing semicolon or so, and the code works properly when I have only one case. I searched trough switch tutorials, but I didn't find anything about vectors and switch statements mixed is a problem.

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;
}

What am I missing?

cpp
  • 3,743
  • 3
  • 24
  • 38
Attila Herbert
  • 309
  • 1
  • 2
  • 10

1 Answers1

14

Add another scope inside the case:

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

The extra scope constrains the lifetime of the vector object. Without it, a jump to case 2 would skip over the initialization of the object, which would nonetheless have to be destroyed later, and this is illegal.

Kerrek SB
  • 464,522
  • 92
  • 875
  • 1,084