C ++表示类函数引发自定义异常

时间:2016-12-02 15:19:04

标签: c++ throw custom-exceptions

我已尝试了大约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的东西?

1 个答案:

答案 0 :(得分:1)

  

有没有办法指定方法在C ++中抛出的异常,还是只是Java的东西?

是的,是的,这是一个在任何c ++程序中都非常不受欢迎的java事物。如果函数可以抛出异常,只需将异常规范留空即可。如果不是,请使用noexcept(&gt; = c ++ 11)或throw()(&lt; c ++ 11)

此外,您可以通过std::runtime_errorstd::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");