一个关于在case语句下定义string类型变量时出现报错的有关问题

一个关于在case语句下定义string类型变量时出现报错的问题
在选择语句case下,我定义了一个string类型变量,但是在编译的时候出现了这种错误,1)error C2360: “fname”的初始化操作由“case”标签跳过;2) 参见“fname”的声明。
局部的代码是这样的:
case 2:
cout<<"Which one do you want to modify the data ? ";
int d;
cin>>d;
cout<<"what name do you want to enter ? ";
string fname;     //就是这里出问题了
cin>>fname;
cout<<"what number do you want to enter ? ";
int e;
cin>>e;
setgolf(love_you[d-1],fname,e);
break;
但是当我把string fname定义到switch语句外的时候就能通过编译了,我在网上也查找过,网上也说的是好像case可以定义那些常规变量,但是像string类却不行。但是也没说清楚为什么。恳请大神指教,谢谢。
------解决方案--------------------
加对儿 {} 试试。

case 2:
{
cout<<"Which one do you want to modify the data ? ";
int d;
cin>>d;
cout<<"what name do you want to enter ? ";
string fname;     //就是这里出问题了
cin>>fname;
cout<<"what number do you want to enter ? ";
int e;
cin>>e;
setgolf(love_you[d-1],fname,e);
}
break;

------解决方案--------------------
case 跟goto类似。。
goto中能定义非基础变量么。。。
如果非要用的话,必须加大括号。因为离开大括号后,大括号中申请的变量将会被释放。