您好我有一个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();
}
任何帮助将不胜感激!
答案 0 :(得分:3)
你需要实际捕获你的异常:
try
{
throw stack_full_error("Stack is full!");
} catch(stack_full_error& ex)
{
std::cout << ex.what();
}