这是一小段程序:
if(port==2)
{
switch(ch)
{
case '$':
m_strRXDataCOM2=(char)ch;   // 如果是$ 不要写成m_strRXDataCOM2+=(char)ch;
                           //这里相当于清空之前的字符串的作用
break;
case'*':
{
m_strRXDataCOM2+=(char)ch;
CDC*pDC=GetDC();   //准备数据显示
pDC->TextOut(10,150,"COM2接收到"+m_strRXDataCOM2);
ReleaseDC(pDC);
m_strRXDataCOM2.Replace('$','Y');  //替换后发送
m_SerialPort[1].WriteToPort(m_strRXDataCOM2);
}
break;
default:
m_strRXDataCOM2+=(char)ch;
break;
} }
如果我把case '*'后的大括号删去就有错误:
error C2361: initialization of 'pDC' is skipped by 'default' label
请问这是为什么啊?

解决方案 »

  1.   

    不是CDC的问题,是switch中不能直接定义变量,必须要用大括号来“嵌”一层才行。
      

  2.   

    这个与CDC类无关,switch语句中各个case下面的代码属于同一个作用域,也就是说default标签下的代码是可以访问pDC这个变量的,但是从你的代码看出,如果代码直接进入default执行,那么pDC这个变量就没有初始化,所以编译器报错。加上一个大括号只是分隔作用域,这样default标签下的代码就无法访问pDC了,也不会出现编译错误