以下代码生成“松散的抛出指定符错误”。您能帮我克服这个错误吗?
class base
{
virtual void abc() throw (exp1);
}
void base::abc() throw (exp1)
{
......
}
class sub : public base
{
void abc() throw(exp1, exp2);
}
void sub::abc() throw (exp1, exp2)
{
.....
}
最佳答案
之所以会出现问题,是因为子类必须在可以使用基类的任何地方都可用,并且不得抛出除基类中指定的以外的任何异常类型。
有三种解决方案:
我建议删除它们;他们被广泛认为是一个坏主意,部分原因是因为这样的问题。正如Matthieu所指出的那样,标准委员会对此表示同意,并且在下一版标准中将弃用异常说明符。