C ++通过继承std :: exception来创建新的异常

时间:2014-01-07 23:04:16

标签: c++ class exception c++11 exception-handling

您好我有一个c ++作业,我需要创建自己的异常。我的异常类必须从std :: exception继承,其他2个类需要从那个派生。我现在的方式它实际上编译和工作非常好。但是当抛出异常时,我得到例如: 在抛出'stack_full_error'的实例后终止调用   what():堆栈已满! 中止(核心倾销)

我对此事感到非常困惑,不幸的是我在网上或书中找不到多少帮助。我的标题如下:

class stack_error : public std::exception
{
 public:
  virtual const char* what() const throw();
  stack_error(string const& m) throw(); //noexpect;
  ~stack_error() throw();
  string message;
 private:
};

class stack_full_error : public stack_error
{
 public:
  stack_full_error(string const& m) throw();
  ~stack_full_error() throw();
  virtual const char* what() const throw();
};

class stack_empty_error : public stack_error
{
 public:
  stack_empty_error(string const& m) throw();
  ~stack_empty_error() throw();
  virtual const char* what() const throw();
};

我的实施是:

stack_error::stack_error(string const& m) throw()
: exception(), message(m)
{
}

stack_error::~stack_error() throw()
{  
}

const char* stack_error::what() const throw()
{
  return message.c_str();
}

stack_full_error::stack_full_error(string const& m) throw() 
  : stack_error(m)
{   
}

stack_full_error::~stack_full_error() throw()
{

}

const char* stack_full_error::what() const throw()
{
  return message.c_str();
}

stack_empty_error::stack_empty_error(string const& m) throw() 
  : stack_error(m)
{   
}

stack_empty_error::~stack_empty_error() throw()
{

}

const char* stack_empty_error::what() const throw()
{
  return message.c_str();
}

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:3)

你需要实际捕获你的异常:

try
{
    throw stack_full_error("Stack is full!");
} catch(stack_full_error& ex)
{
    std::cout << ex.what();
}