为什么此程序无法捕获异常
Why does this program fail to catch an exception?
我正在尝试使用异常打印类型名称,但我的程序似乎甚至没有捕获异常,而是似乎调用了默认终止函数。我错过了什么?
#include <cstdio>
#include <exception>
#include <typeinfo>
namespace Error
{
template<typename T>
class Blah : std::exception
{
virtual const char* what() const throw()
{
return typeid(T).name();
}
};
}
void blah() {
throw Error::Blah<int*********>();
}
int main()
{
try
{
blah();
}
catch (std::exception& e)
{
std::puts(e.what());
}
}
问题就在这里:
template<typename T>
class Blah : std::exception
// ^^^^^^^^^^^^^^^
您是私下继承(因为默认情况下class
继承是private
的,并且您不添加说明符),因此std::exception
不是可访问的基础。你必须公开继承。
相关文章:
- 当类定义不可见时捕获异常
- 来自 Android 应用程序内部的 boost 类型的 boost::wrapexcept<boost::system::system_error> 的未捕获异常
- 如何通过 pybind11 从 python 中的C++中捕获异常?
- 信号后未捕获异常
- 捕获异常后如何退出程序执行
- C++ 捕获异常后进行清理的标准方法是什么?
- 使用模板类引发和捕获异常
- E/libc++abi:终止于类型为google::protobuf::FatalException的未捕获异常
- 如果在生成 std::thread 后引发,则未捕获异常
- C++ 未捕获异常,程序将终止并中止
- C++程序在第一次尝试时会给出垃圾,但如果它捕获异常并重试,则会给出适当的值
- 将视觉C 媒体基础捕获应用程序转换为C 构建器
- 仅捕获异常就可以检测所有二进制文件在C 中读取错误是否足够
- 如何捕获 I/O 异常(确切地说是 I/O,而不是 std::exception)
- 为什么捕获异常播放允许尾括号
- throw() 函数应该总是在异常时展开堆栈并允许捕获异常还是必须调用 std::terminate ?
- 寻求与类型为 std::invalid_argument 的未捕获异常相关的运行时错误的建议: stoi:无转换
- 为什么此程序无法捕获异常
- 为什么我的程序没有从取消引用空指针中捕获异常?
- Catch(…)没有捕获异常,我的程序仍然崩溃