这个分支语句怎么的用相信很多人晓得,如果碰到一个错误咋办?
先看看程序:
switch (t) case 1: |
明显报错,initialization of 'a' is skipped by ' case' label
有两种解决方法。
其实这一起都是由于变量的作用域作祟,switch里面的a定义了,那么他就应该在以后直到default后的“}”出现,如果t不等于0,那么程 序执行到case0后面去了,但是a的作用域一直存在,而且还一直就不让后面的“同志使用”,给看不准用,这样是不对的。这个过程发生在编译时刻识别。
要么让作用域按照自己的想法执行,要么就把变量的识别转移到运行时刻!
一:
作用域缩小,把有定义新的变量且同时初始化的,放到一个花括号里面去,那么随着过程的结束,变量消失,而且也不会被后面的看到。
这样:
switch (a) { case 1: { int ab = 11; cout << ab << endl; } case 2: { cout << a << endl; } } |
第二:
运行时刻识别,一个没有初始化的变量,具体值要到运行时刻才被确定,这样就可以被后文使用。我们只是声明,啥时候用的时候啥时候再给出值。
switch (a) { case 0: int t; t= 0; break; default: break; } |
这样就没有问题了,其实这一招对类对象也是可以用的。比如:
一个类,我们不给出显示初始化构造函数,那么他的值也是未定义的,具体的给值也要到运行时刻。
class B switch (a) |
但是一旦定义了默认构造函数,即便是一个空的函数,也是不行的,因为这样就导致了对象的创建而且初始化。
如下就是不对的:
class B switch (a) return 0; |
编译一下就可以看到如下错误:
d:\csdnc++\1215\switchcase\switchcase\switchcase.cpp(42) :
error C2361: initialization of 'b' is skipped by 'default' label