这让我整晚都感到很疯狂。
我从库中抛出自定义异常,代码如下:
终端输出如下:
“Terminate called after throwing an instance of 'Exception' what(): The pattern validator cannot be altered once set. Abort trap.”
现在除了献祭山羊,我不知道该尝试什么了...有什么提示/建议吗?
注意:如果我在主函数中抛出自定义异常,就可以轻松捕获它。
使用带有C++0x支持的GCC的Mac OS X环境。
编辑:目前的解决方案是在基于Linux的系统(Fedora)上继续开发。我暂时不会接受答案。 感谢大家的帮助。
class ExceptionImpl;
/**
* Custom Exception.
*/
class Exception : public virtual std::exception
{
public:
Exception( const Exception& original );
Exception( const std::string& message );
virtual ~Exception( void ) throw( );
virtual const char* what( void ) const throw( );
private:
const std::unique_ptr< ExceptionImpl > m_pimpl;
};
我从库中抛出自定义异常,代码如下:
throw Exception( "Error message" );
通过主函数中的代码捕获它
try
{
regex pattern(R"(a*)");
Id::set_pattern_validator(pattern);
assert(false);
}
catch( Exception const& exception )
{
assert(true);
}
Id::set_pattern_validator
是库中Id类的静态方法,也是异常的来源。我已经尝试了一切办法去捕获这个异常,但都没有成功。
catch( Exception )
catch( std::exception )
catch( ... )
Nada!
终端输出如下:
“Terminate called after throwing an instance of 'Exception' what(): The pattern validator cannot be altered once set. Abort trap.”
现在除了献祭山羊,我不知道该尝试什么了...有什么提示/建议吗?
注意:如果我在主函数中抛出自定义异常,就可以轻松捕获它。
使用带有C++0x支持的GCC的Mac OS X环境。
编辑:目前的解决方案是在基于Linux的系统(Fedora)上继续开发。我暂时不会接受答案。 感谢大家的帮助。
std::bad_alloc
肯定更好。编辑:Boost.Exception使用pimpl。 - Yakov Galka