我已尝试了大约20次尝试&在过去2小时内阅读了大量的网页,无法弄清楚我在这里做错了什么:
#pragma once
#include <exception>
using namespace std;
class EmptyHeap : public exception {
public:
virtual const char* what() const throw()
{
return "The heap is empty!";
}
};
然后在堆类中,使用一个公共方法:
void remove() throw()//EmptyHeap
{
if (isEmpty())
{
EmptyHeap broken;
throw broken;
}
...
此代码有效,但原始标题为:
void remove() throw EmptyHeap;
有没有办法指定方法在C ++中抛出的异常,还是只是Java的东西?
答案 0 :(得分:1)
有没有办法指定方法在C ++中抛出的异常,还是只是Java的东西?
是的,是的,这是一个在任何c ++程序中都非常不受欢迎的java事物。如果函数可以抛出异常,只需将异常规范留空即可。如果不是,请使用noexcept
(&gt; = c ++ 11)或throw()
(&lt; c ++ 11)
此外,您可以通过std::runtime_error
或std::logic_error
(或任何其他标准错误)导出任何用户例外来帮助自己。
e.g。
#include <stdexcept>
// this is literally all you need.
struct EmptyHeap : std::logic_error {
// inherit constructor with custom message
using logic_error::logic_error;
// provide default constructor
EmptyHeap() : logic_error("The heap is empty") {}
};
现在抛出:
throw EmptyHeap();
或使用自定义消息:
throw EmptyHeap("the heap is really empty");