首页 > 解决方案 > 在 C++11 中继承异常?

问题描述

我有一个类叫Matrix<t>,我的教授让我写一个异常类:

Matrix::IllegalInitialization

这样它就包含了函数what(),所以我写了(在 Matrix.h 中):

template<class T>
class Matrix<T>::IllegalInitialization {
public:
    std::string what() const {
        return "Mtm matrix error: Illegal initialization values";
    }
};

但是我有一个问题,这个类不继承异常,如何解决这个问题?

我希望以下工作:

     try {
         Dimensions dim(0,5);
         Matrix<int> mat(dim);
} catch (const mtm::Matrix<int>::IllegalInitialization & e){ cout<< e.what() <<endl;
}

编辑: 我的代码应该是这样的吗?

template<class T>
class Matrix<T>::IllegalInitialization : public std::exception {
public:
   const char* what() const override {
      return "Mtm matrix error: Illegal initialization values";
   }
};

我正进入(状态:

错误:覆盖函数的异常规范比基本版本更宽松

标签: c++exception

解决方案


what()方法std::exception是(cf cppreference):

virtual const char* what() const noexcept;

您的方法未声明noexcept,因此它不能覆盖std::exception::what()


推荐阅读