2014-03-04 4 views
0

이것은 단순한 것이지만 분명히 이것을 지정하는 다른 글을 찾을 수는 없었지만 어딘가에 묻혀 있어야합니다.C++에서 에러를 던질 때 문자열 추가하기

C++에서 try catch 블록을 아래의 방법으로 사용할 때 오류 메시지에 문자열 변수를 추가하려면 어떻게합니까?

이렇게하려고 할 때 처리되지 않은 예외가 발생합니다. 어떤 유형이 다시 전달되는지와 관련이 있습니까? 문자열을 char *로 반환하는 것으로 나타납니다. 그게 맞다면 문제가 생길까요? 어떻게하면 좋을까요? 추가 catch (const string my_msg)를 추가하려고 시도했지만 작동하지 않았습니다.

string msg = "message"; 
try{ 
    if (...) 
     throw "My error " + msg; 
    } 
catch (const char* my_msg){ 
    cerr << my_msg << endl; 
} 

답변

2

"My error " + msgoperation that concatenatesconst char* 문자열과 std::string입니다. 이 연산은 std::string 유형의 임시 변수를 생성합니다. 따라서 throw 된 변수는 std::string 유형의 catch 절을 사용하여 catch해야합니다.

catch (const std::string& my_msg){ 
    cerr << my_msg << endl; 
} 

아직도, 그것은 당신의 예외가 std::exception에서 파생이 더 나은 좋습니다. 비록 및 그 파생어가 있으므로 공통 런타임 예외에 대한 유용한 분류를 제공하므로 사용자 자신의 예외 클래스를 작성할 필요가 없습니다.

예외에 대해 고유 한 유형이 필요한 경우가 많이 있으며 그 중 종종 프로젝트 또는 도메인 특정 유형이있을 수 있습니다. C에서이

struct my_exception : std::runtime_exception { 
    using std::runtime_exception::runtime_exception; // Inherit runtime_exception's constructors 
}; 

이 C++ (11)의 inheriting constructors 사용으로 자신의 예외 유형으로 쉽게 만들기, 11 ++.