std::runtime_error
을 던지고 처리하지 않으면 터미널에서 자동으로 what()
의 결과를 표시하여 디버깅을 훨씬 쉽게합니다. 예 :처리되지 않은 사용자 정의 예외를 throw 한 후 어떻게 what()을 호출 할 수 있습니까?
#include <iostream>
int main()
{
throw std::runtime_error("This is an error message.\n");
}
콘솔 출력이 클래스에서 파생 된
terminate called after throwing an instance of 'std::runtime_error'
what(): This is an error message.
사용자 정의 예외 클래스가 같은 행동을 보여, 처음부터 만든 예외 클래스는 기본적으로 그렇게하지 않습니다.
그러나 내가 만들고자하는 예외 클래스는 std::runtime_error
에서 파생되어서는 안됩니다. 디버그 목적으로는 what()
이 여전히 프로그램 충돌 후 인쇄되어야합니다.하지만 어떻게해야 할지를 알 수는 없습니다. 누군가 나를 기쁘게 도와 줄 수 있습니까? 순간
#include <iostream>
struct Custom_Exception
{
std::string Msg;
Custom_Exception(std::string Error_Msg) noexcept
{
Msg=Error_Msg;
}
std::string what() noexcept
{
return Msg;
}
};
int main()
{
throw Custom_Exception("This is an error message.\n");
}
콘솔 출력 :
terminate called after throwing an instance of 'Custom_Exception'
오류 메시지 없음 what():
... 소멸자에 std::cout<<Msg;
을 두는 것은 도움이되지 않습니다 .
의견을 보내주세요. 고맙습니다.
"하지만 내가 만들고 싶은 예외 클래스는 std :: runtime_error에서 파생해서는 안됩니다." 왜 안돼? –
메인에서 예외 상황을 파악하고 원하는 조치를 취하십시오. 나는 이것을 위해 런타임에 의존하지 않을 것이다. –
@NeilButterworth 특정 데이터 형식을 사용할 때마다 또는 변환 할 때마다 강제로 내 자신의 프로젝트에 사용할 일반 예외 클래스를 만들지 못하게합니다.이 기능을 추가하는 방법을 알고 싶습니다. 호기심. 나는 그런 식으로 좋아하지 않는다. 그렇지 않으면 난 그냥 std :: runtime_error 자체를 사용할 수 있습니다 ...하지만 그것은 특정 물건 std :: runtime_error 수 없기 때문에 사용자 지정 예외 클래스에 의해 싶습니다. – Thynome