C中的内联throw()方法
我试图定义一个非常简单的异常类.因为它非常简单,我只想将它保存在.h文件中,但编译器不喜欢throw().代码:
#include <exception> #include <string> class PricingException : public virtual std::exception { private: std::string msg; public: PricingException(std::string message) : msg(message) {} const char* what() const throw() { return msg.c_str(); } ~PricingException() throw() {} }; GCC给出以下错误: /home/ga/dev/CppGroup/MonteCarlo/PricingException.h:13: error: expected unqualified-id before ‘{’ token /home/ga/dev/CppGroup/MonteCarlo/PricingException.h:14: error: expected unqualified-id before ‘{’ token 对于带有throw()的行.知道怎么解决吗? 编辑 我试图删除有问题的方法的主体,即 virtual ~PricingException() throw();// {} 现在我得到更奇怪的错误信息: /home/ga/dev/CppGroup/MonteCarlo/PricingException.h:14: error: looser throw specifier for ‘virtual PricingException::~PricingException()’ /usr/include/c++/4.5/exception:65: error: overriding ‘virtual std::exception::~exception() throw ()’ 它只是忽略了我的throw说明符! 解决方法
尝试使用C 0x语法,g 4.5可能已经足够支持它了:
const char* what() const noexcept { return msg.c_str(); } 但是,这应该不重要(来自3242草案,[除了.spec]部分的措辞:
.
.
因此,尝试更新的g版本,这些更改可能会更完整地实现. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |