我试图在我的链表为空时抛出EmptyListException,但如果我取消对throwEmptyListException()的注释,程序将继续终止。
这是我的EmptyListException头

#ifndef EMPTYLISTEXCEPTION_H
#define EMPTYLISTEXCEPTION_H

#include <stdexcept>
using std::out_of_range;
class EmptyListException : public out_of_range
{
    public:
        EmptyListException(): out_of_range("Empty List!\n") {}

};

#endif // EMPTYLISTEXCEPTION_H

-在Clist.h中抛出命令
template <typename E>
E Clist<E>::Remove() throw()
{
    if(isEmpty())
    {
        cout << "Empty List, no removal";
        //throw EmptyListException();
        return '.';
    }
        ... code
}

-赶上Main
try{
    cout << list->Remove() << endl;
} catch(EmptyListException &emptyList)
{
    cout << "Caught :";
    cout << emptyList.what() << endl;
}

错误“此应用程序已请求运行时以异常方式终止它。请与应用程序的支持团队联系以获取更多信息。

最佳答案

好吧,您告诉编译器,您不会从Remove()中抛出任何异常!当您违反此 promise 时,它将终止程序。删除函数声明中的throw(),然后重试。

关于c++ - C++异常未捕获,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12875903/

10-10 19:16