【发布时间】:2015-08-30 21:13:10
【问题描述】:
我正在为我用 C++ 编写的一个软件进行异常处理。我遇到编译器错误(使用 g++ (GCC) 4.8.1 / mingw32)我不明白,这是一个最小的例子:
#include <iostream>
#include <exception>
class Bad_Img_Load: public std::exception {
//public:
virtual const char* what() const throw(){
return "An image could not be loaded.";
}
};
int main () {
try{
throw Bad_Img_Load();
}catch (Bad_Img_Load& e){
std::cout << e.what() << '\n';
}
return 0;
}
错误是:
a.cpp: In function 'int main()':
a.cpp:6:22: error: 'virtual const char* Bad_Img_Load::what() const' is private
virtual const char* what() const throw(){
^
a.cpp:15:25: error: within this context
std::cout << e.what() << '\n';
^
请注意,如果我取消注释“public:”行,那么它就可以正常工作。但是它继承的类“异常”将所有内容都定义为公共的。所以我完全不明白为什么会出现这个错误。
【问题讨论】:
-
如果你声明它是私有的,为什么你期望被覆盖的函数是公共的?
-
@Kenji:不,他们不这样做。我没有在链接中看到它。在您的链接中,他们总是将异常捕获为
std::exception &e,这就是他们可以访问 publice.what()的原因。他们从不将异常捕获为用户定义的类型。您将异常捕获为Bad_Img_Load& e,这是一个完全不同的故事。 -
你说得对,AnT,我刚刚注意到了。现在我懂了。我不知道为什么这让我如此困惑。
标签: c++ exception compiler-errors private mingw32