switch语句case内声明对象

来源:互联网 发布:诺维斯基10年数据 编辑:程序博客网 时间:2024/05/19 04:02
今天本来想使用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
原创粉丝点击