编译器错误:destuctor 的更宽松的抛出说明符
Compiler error: looser throw specifier for destuctor
#include <iostream>
struct ICantChange
{
virtual ~ICantChange() {}
};
struct ClassThatThrows
{
virtual ~ClassThatThrows() noexcept(false)
{
throw 44;
}
};
struct Test : ICantChange
{
~Test()
{
}
ClassThatThrows instance;
};
main()
{
try
{
Test obj;
}
catch(int except)
{
std::cout << "caught" << std::endl;
}
}
此代码给出错误消息:
main.cpp:20:5: error: looser throw specifier for ‘virtual Test::~Test() noexcept (false)’
~Test()
^
main.cpp:6:13: error: overriding ‘virtual ICantChange::~ICantChange() noexcept’
virtual ~ICantChange() {}
要修复该错误,我看到的唯一选择是将noexcept(false)
添加到类ICantChange
的析构函数中,因为我是库类,所以我不能。
我知道抛弃析构函数是不好的,但现在我有Test
类,我想捕获在它被破坏时抛出的异常。
任何人都可以提出解决方案吗?
您遇到的问题是析构函数或noexcept(true)
,因此通过添加一个noexcept(false)
的成员,您正在违反该承诺。
但不要抛出析构函数:抛出析构函数中的异常
相关文章:
- 缺少类型说明符,显式类型为"缺少错误"
- 编译器错误:destuctor 的更宽松的抛出说明符
- 错误:不能使用"显式"说明符声明 bool'
- C++错误:"class name"之前的预期类型说明符
- 错误:C4430:缺少类型说明符-假定为int.注意:C++不支持default-int
- 在C++中出现错误之前,无效使用了不完整的类型和所需的类型说明符
- 为什么对齐说明符会在 Clang 上抛出错误?
- 在 C++ 中出现unique_ptr错误之前的预期类型说明符
- VisualC++ 编译器错误 C3646:未知的重写说明符
- 未报告的错误VS 2015:十六进制字符说明符
- 在 vscode 上编译错误.类型说明符是 C++11 扩展
- 获得预期 C++ 中的类型说明符错误
- 错误:缺少类型说明符
- 声明 Windows API 结构 (DCB) 的对象 - 错误 C4430:缺少类型说明符 - 假定为 int
- C++ - 错误:为 OpenCV 的 cv::标量::all 创建 C 包装器时出现预期的类型说明符
- C++ 两个类相互引用 错误:'ClassName'之前预期的类型说明符
- C++ 错误:需要类型说明符
- 编译器错误,应为嵌套的名称说明符
- 尝试制作一堆字符串.出现缺少类型说明符错误
- 调用基类中私有的派生类的虚函数时获得访问说明符错误