2012-10-06 2 views
1

부스트 :: 변형 사용법을 배웁니다. 사용자에게 모양 유형을 만들도록 요청하는 함수를 만들려고합니다. 그런 다음 요구 된 도형을 생성하여 변형에 지정하고 반환하십시오. 이 작업을 수행하기 위해 스위치를 사용하고 있지만 기본 문과 함께 런타임 오류가 발생합니다.부스트 : 변형을 반환하는 함수를 작성하십시오.

나는 또한 컴파일러에서 경고를 얻을 : 사용자가 잘못된 선택을 입력하면

가 어떻게 그냥 문자열을 인쇄하는 "경고 C4715 : 'ShapeVariant를'모든 제어 경로는 값이 반환"?

감사합니다. 당신은 C++에서이 작업을 수행 할 수

#include "boost/variant.hpp" 

typedef boost::variant<Point,Line,Circle> ShapeType; 

ShapeType ShapeVariant() 
{ 
    cout << "Please select a Shape Type\n1: Point\n2: Line\n3: Circle\n\nSelection: "; 

    int choice; 

    cin >> choice; 

    switch(choice) 
    { 
    case 1: return Point(); break; 
    case 2: return Line(); break; 
    case 3: return Circle(); break; 
    default: cout << "Invalid selection." << endl; break; 
    } 
} 

답변

3

대신 함수에서 문자열을 출력하는 대신 호출자가 예외가 발생하는 이유를 포착하고 인쇄한다는 예외를 throw 할 수 있습니다. 발신자에서

switch(choice) 
{ 
    case 1: return Point(); break; 
    case 2: return Line(); break; 
    case 3: return Circle(); break; 
    default: throw std::runtime_error("Invalid selection."); 
} 

:

try { 
    auto result = ShapeVariant(); 
} catch(std::exception const& e) { 
    std::cout << e.what() << std::endl; 
} 
+0

딱! 고마워요! –

0

는, 같은 코드를 실행하면 유효하지 않은 경우에 정의되지 않은 동작이 발생합니다. 선택이 실제로 무효 인 경우는 예외를 throw합니다. 이 경우와 같이 디자인 된 boost::optional을 볼 수도 있습니다.

관련 문제