【发布时间】:2020-06-25 09:58:15
【问题描述】:
我有一个类叫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";
}
};
我得到:
错误:覆盖函数的异常规范比基础版本更宽松
【问题讨论】:
-
只是继承自
std::exception?我不明白这个问题 -
请提供minimal reproducible example 和编译器错误(如果有),或说明实际和预期结果
-
你知道如何从
bar继承foo吗? -
您发布的代码中没有继承,但无论如何您可以从任意数量的类继承。有什么问题?
-
请阅读minimal reproducible example。我们不需要看到
Matrix<T>并且您发布的代码不完整。尝试编译它会导致与您的问题无关的错误