switch语句case内声明对象

今天本来想使用switch语句来实现不同情况下执行相对应的代码,在每个case内都需要声明不同的类的对象,结果出现
switch(work_state_ptr->cutter_type)
	{
	case 1:
		
			boost::shared_ptr<ocl::CylCutter>  cutter1(new ocl::CylCutter(work_state_ptr->cutter_diameter,work_state_ptr->cutter_Lc));
	                GeneratePathforCutter(*(cutter1.get()),stl_sf);
			break;
		
	case 2:
		
			boost::shared_ptr<ocl::BallCutter> cutter2(new ocl::BallCutter(work_state_ptr->cutter_diameter,work_state_ptr->cutter_Lc));
			GeneratePathforCutter(*(cutter2.get()),stl_sf);
			break;
		
	case 3:
		
                        boost::shared_ptr<ocl::BullCutter> cutter3(new ocl::BullCutter(work_state_ptr->cutter_diameter, work_state_ptr->cutter_radius,work_state_ptr->cutter_Lc));
			GeneratePathforCutter(*(cutter3.get()),stl_sf);
			break;
		
	case 4:
		
			boost::shared_ptr<ocl::ConeCutter> cutter4(new ocl::ConeCutter(work_state_ptr->cutter_diameter,work_state_ptr->cutter_B1,work_state_ptr->cutter_Lc));
			GeneratePathforCutter(*(cutter4.get()),stl_sf);
			break;
		
	default:
		break;
	}

错误error C2360: “cutter1”的初始化操作由“case”标签跳过


分析原因:在case 可能没有被执行到时,对象就没有相应的初始化导致。

解决方法是:在每个case里面都加入大括号“{ }”,使每个对象都成为局部变量。

即:

switch(work_state_ptr->cutter_type)
	{
	case 1:
		{
		       boost::shared_ptr<ocl::CylCutter>  cutter1(new ocl::CylCutter(work_state_ptr->cutter_diamet                        er,work_state_ptr->cutter_Lc));
	        GeneratePathforCutter(*(cutter1.get()),stl_sf);
			break;
		}
	case 2:
		{
			boost::shared_ptr<ocl::BallCutter> cutter2(new ocl::BallCutter(work_state_ptr->cutter_diameter,work_state_ptr->cutter_Lc));
			GeneratePathforCutter(*(cutter2.get()),stl_sf);
			break;
		}
	case 3:
		{
			boost::shared_ptr<ocl::BullCutter> cutter3(new ocl::BullCutter(work_state_ptr->cutter_diameter,work_state_ptr->cutter_radius,work_state_ptr->cutter_Lc));
			GeneratePathforCutter(*(cutter3.get()),stl_sf);
			break;
		}
	case 4:
		{
			boost::shared_ptr<ocl::ConeCutter> cutter4(new ocl::ConeCutter(work_state_ptr->cutter_diameter,work_state_ptr->cutter_B1,work_state_ptr->cutter_Lc));
			GeneratePathforCutter(*(cutter4.get()),stl_sf);
			break;
		}
	default:
		break;
	}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值