昨天的代码中涉及switch-case语句又出现了某个变量没有初始化的报错,如下提示:
switch(cmd)
{
..............................
case CMD_FAC_DEFAULT:
TvApi_RestoreDefault();
//{
CChannel *pChannel = TvApi_GetChannel(0);
if (pChannel != NULL) {
TvApi_PlayChannel(pChannel,false,true);
delete pChannel;
}
// }
break;
case ....:
break;
}
error: jump to case label
error: crosses initialization of 'CChannel* pChannel'
之前也遇到了这种情况,我总是在整个case条件加上{}来解决,从来没有细究过原因,一个老同事告诉我在中间变量定义的地方加{}也可以,当时不明所以,在网上查了一些资料都没查到点上,是一个同事的提醒我找到的,原来switch-case语句中的变量定义要考虑作用域。
在C++中,switch-case中的case只是一个标签,case中的代码并没有构成一个局部作用域,也就是说,所有在case里面定义的变量作用域都是switch{...},在后面其他case中依然可以访问到这个变量.怎么感觉自己讲不明白呢,还是贴个不错的链接吧:
http://blog.youkuaiyun.com/tonywearme/article/details/7075809