代码摘要:
switch (splitCountA)
{
case 0:
//AfxMessageBox("0");
break;
case 1:
case 6:
for (int k=1;k<7;k++)
{
strtemp.Format("-%d-",k);
dc.TextOut(rectWnd[k].left,rectWnd[k].top,strtemp,sizeof(strtemp)-1);
dc.Rectangle(&rectWnd[k]);//画空心的矩形
}
dc.SelectObject(pOldBrush);//恢复画刷
break;
case 7:
AfxMessageBox("7");
break;
//default:
// AfxMessageBox("default");
// break;
}
出错的提示为一连串的:
error C2360: initialization of 'k' is skipped by 'case' label
原因为:
如果变量定义在switch外面那么生命期才能到达case内部
像楼主的定义方法,a是作用域是switch块,又因为它是在case 1:这个lable后定义的,假设程序运行时n直接匹配case 2:的话,此时a就是未定义的,这就与a的作用域矛盾,所以编译器不允许这样的定义。
可以像2楼的第二种方法那样定义,此时a的作用域是case 1:lable后那个大括号标识的局部域,就不会产生像上边说的矛盾了
解决办法,将case语句段放在花括号{}中,或者将变量的定义放在switch语句外