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;
	}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章