荔园在线
荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀
[回到开始]
[上一篇][下一篇]
发信人: flakey (烟酒不沾,才怪), 信区: Program
标 题: Re: 最近发现一个问题[转载]
发信站: 荔园晨风BBS站 (Sat Jul 26 13:33:00 2003), 站内信件
我想这是作业域的问题。
第一个case没有明显给出作用域,要是没有break一直执行到switch结束,但第二个case
访问不了第一个case的变量,所以编译器给出的error是:initialization of 'i'
is skipped by 'case' label.
你可以在该case和该case的break之间加上{ },明确case 和 break之间的变量的作用域
这使得变量能在内存分配中分配到确切无二义的堆栈中。
当然,在最后一个case(没有default)应该可以不用{}.
【 在 bigone (好好学习) 的大作中提到: 】
: 【 以下文字转载自 Visual 讨论区 】
: 【 原文由 bigone 所发表 】
: 如果在 c++ switch-case 语句的case分支语句中声明变量,有时候
: 编译器是不给通过的,不给通过的情形我试过的有:
: ⑴ switch(n) {
: case 1:
: for(int i; i<10; i++){};//但是在for外面声明int i,则可以通过
: break;
: case 2:
: .
: .
: }
: ⑵ switch(n) {
: case 1:
: CRect rc; //CRect 为mfc中定义的描述矩形的数据类型
: break;
: case 2:
: .
: .
: }
: //但是可以声明 CRect* 的对象
: 不甚理解其中原因,个人猜测是由于存在选择分支,编译器在编译的时候决定
: 不了是否给这个声明的对象分配内存。哪位知道其中缘由的看看啦。。。
--
伤心流浪的汉子
不需要关怀 不需要温暖 不需要爱情
他的生命只需要飞 飞 不停的向前飞和不停的受伤
※ 来源:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.0.229]
[回到开始]
[上一篇][下一篇]
荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店