标题:为什么类对象定义放在条件块中会发生编译错误?
取消只看楼主
olivezhang
Rank: 1
等 级:新手上路
帖 子:223
专家分:0
注 册:2005-9-14
 问题点数:0 回复次数:3 
为什么类对象定义放在条件块中会发生编译错误?

有这样一段代码:

class NoJump
{
public:
NoJump() {}
};

void FunNoJump(int i)
{
switch (i)
{
case 1:
NoJump aa; //编译出错提示: error C2360: initialization of 'aa' is skipped by 'case' label, see declaration of 'aa'
break;
case 2:
NoJump bb; //编译出错提示:error C2360: initialization of 'bb' is skipped by 'case' label, see declaration of 'bb'
break;
case 3:
break;
}
}

修改后:
void FunNoJump(int i)
{
switch (i)
{
case 1:
{//加上括号
NoJump aa;
}//加上括号
break;
case 2:
{//加上括号
NoJump bb;
}//加上括号
break;
case 3:
break;
}
}

编译通过,没有想明白为什么。。。。

搜索更多相关主题的帖子: 定义 case 对象 NoJump 编译 
2006-09-06 11:17
olivezhang
Rank: 1
等 级:新手上路
帖 子:223
专家分:0
注 册:2005-9-14
得分:0 
在C++编程思想一书中有这样的描述,但还是没有真正理解
在C++编程思想一书中有这样的描述,但还是没有真正理解。。。


谷底深深行 ,峰顶漫漫步......@_@
2006-09-06 18:22
olivezhang
Rank: 1
等 级:新手上路
帖 子:223
专家分:0
注 册:2005-9-14
得分:0 
以下是引用wangxiang在2006-9-6 20:39:57的发言:

switch (i)
{
case 1:
NoJump aa; break;
case 2:
NoJump bb; break;
case 3:
break;
}
假如i = 2;则执行case 2的语句,从语法上讲case 2可以执行aa这个变量,但代码执行时却又没有执行 NoJump aa; 这一句,这是矛盾的。
所以必须加上{}限制变量的作用域

非常感谢wangxiang的解释,但是"从语法上讲case 2可以执行aa这个变量"是什么意思呢?
当i=2时,从语法上讲case 2不是应该执行bb这个变量吗?


谷底深深行 ,峰顶漫漫步......@_@
2006-09-07 10:50
olivezhang
Rank: 1
等 级:新手上路
帖 子:223
专家分:0
注 册:2005-9-14
得分:0 

谢谢wfpb版主的点拨,谢谢两位的帮助,现在明白了.:)


谷底深深行 ,峰顶漫漫步......@_@
2006-09-07 11:18



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-88379-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.211745 second(s), 9 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved