今天本来想使用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;
}