这是代码,当我添加其他案例或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;
}
我错过了什么?
答案 0 :(得分:13)
在案例中添加另一个范围:
switch(n)
{
case 1:
{
std::vector<int> foo;
// ...
break;
}
case 2:
// ...
default:
// ...
}
额外范围限制了矢量对象的生命周期。如果没有它,跳转到大小写2
将跳过对象的初始化,但是后来必须将其销毁,这是非法的。