gpt4 book ai didi

c++ - 无法捕获我的异常

转载 作者:太空宇宙 更新时间:2023-11-04 11:45:44 24 4
gpt4 key购买 nike

我创建了以下异常类:

namespace json {

/**
* @brief Base class for all json-related exceptions
*/
class Exception : public std::exception { };

/**
* @brief Indicates an internal exception of the json parser
*/
class InternalException : public Exception {

public:
/**
* @brief Constructs a new InternalException
*
* @param msg The message to return on what()
*/
InternalException( const std::string& msg );
~InternalException() throw ();

/**
* @brief Returns a more detailed error message
*
* @return The error message
*/
virtual const char* what() const throw();

private:
std::string _msg;

};
}

实现:

InternalException::InternalException( const std::string& msg ) : _msg( msg ) { }
InternalException::~InternalException() throw () { };

const char* InternalException::what() const throw() {
return this->_msg.c_str();
}

我这样抛出异常:

throw json::InternalException( "Cannot serialize uninitialized nodes." );

我想在 Boost::Test 单元测试中测试异常抛出行为:

// [...]
BOOST_CHECK_THROW( json::write( obj ), json::InternalException ); //will cause a json::InternalException

但是,当异常发生时测试退出,就好像没有try...catch。

如果我使 try...catch 显式并包围 json::write()try{ json.write(obj); }catch(const json::InternalException& ex){} 打电话甚至 try{json.write(obj);}catch(...){} ,我得到了同样的行为。引发了异常,但无论如何我都无法捕获它。

我得到的输出如下:

terminate called after throwing an instance of 'json::InternalException'
what(): Cannot serialize uninitialized nodes.

我在这里做错了什么?

最佳答案

我找到了。我是在尝试为你们组织 SSCCE 时想出来的。我用抛出说明符声明了 json::write(),但没有包含 json::InternalException

现在将 throw 说明符调整为正确的异常可以让我真正捕获它。感谢所有提示。

关于c++ - 无法捕获我的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19923934/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com