荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: 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软件 网络书店