Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 捕获块在boost异常时被绕过_C++_Visual Studio_Exception_Boost_Try Catch - Fatal编程技术网

C++ 捕获块在boost异常时被绕过

C++ 捕获块在boost异常时被绕过,c++,visual-studio,exception,boost,try-catch,C++,Visual Studio,Exception,Boost,Try Catch,环境:Windows 10、Visual Studio 2015、x64、Unicode、boost 1.64 我很难确定为什么在故意尝试boost异常时catch块没有被命中。重点是让boost告诉我日期的源字符串的格式是否错误 以下是相关代码: std::string sDate("01/03/2017"); // purposely bad date format, should be 2017/01/03 bool bGoodDate(true); try { boost:

环境:Windows 10、Visual Studio 2015、x64、Unicode、boost 1.64

我很难确定为什么在故意尝试boost异常时catch块没有被命中。重点是让boost告诉我日期的源字符串的格式是否错误

以下是相关代码:

std::string sDate("01/03/2017");    // purposely bad date format, should be 2017/01/03
bool bGoodDate(true);
try
{
    boost::gregorian::date dtTemp(boost::gregorian::from_simple_string(sDate));
}
catch (const std::out_of_range& e)
{
    bGoodDate = false;
}
catch (...)
{
    bGoodDate = false;
}
当此代码位于独立控制台程序中时,它可以工作。超出范围的挡块被击中。但是当相同的代码出现在一个静态库中用MFC构建的Windows GUI应用程序中时(不确定是否相关),catch块永远不会被命中。相反,我看到这个boost异常包装器在GUI应用程序引发的未处理异常错误中被引用:

Unhandled exception at 0x00007FFC0BC09E08 in Journal.exe: Microsoft C++ exception: boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::gregorian::bad_day_of_month> > at memory location 0x00000078A3DEB100.
< Journal.exe 0x09007FFC0BC09E08中的代码>未处理异常:微软C++异常:Booo::ExpExtExoTosiff::CLNONIMPL在内存位置0x000 000 78A3DEB100。 我比较了两个项目之间的编译器、调试器和链接器设置,除了GUI项目中第三方库的数量更多,以及构建应用程序所需的控制台和GUI设置较少之外,没有任何差异

我发现了这个看似相关的问题/答案,但我不确定如何根据这个答案找到解决方案:

有没有办法找到这种行为的原因


谢谢。

正如链接的问题所解释的,这是一个RTTI问题。当查找匹配项时,
catch
块检查异常的RTTI。如果异常是由使用不同RTTI的模块抛出的,而不是试图捕获异常的模块抛出的,则
catch
将找不到匹配项。@Remy Lebeau:谢谢。经过一点睡眠,这是有意义的,在GUI项目中关闭“启用运行时类型信息”解决了这个问题,而没有创建另一个。