C++ 错误:当需要异常时,未引发异常
我创建了一个异常:OutOfRangeExceptionC++ 错误:当需要异常时,未引发异常,c++,exception,C++,Exception,我创建了一个异常:OutOfRangeException char& Chaine::operator[](int index){ try{ if((index < 0)){ throw OutOfRangeException(); } } catch(const Chaine::OutOfRangeException &e){ cerr<<"Erreur"<
char& Chaine::operator[](int index){
try{
if((index < 0)){
throw OutOfRangeException();
}
}
catch(const Chaine::OutOfRangeException &e){
cerr<<"Erreur"<<endl;
}
return tab[index];
}
它给了我一个错误,它说:当一个异常被期望时,没有抛出异常。
这是怎么可能的?您要求测试用例测试在执行表达式
s[-1]==0
时是否抛出类型为Chaine::OutOfRangeException
的异常
使用throw OutOfRangeException()抛出该类型的异常代码>,但您可以通过catch(const Chaine::OutOfRangeException&e)
在操作符[]
本身中捕获它
因此,这个throw
永远不会到达s[-1]==0
语句之外,测试不会看到它
如果希望异常到达抛出的函数的外部,请删除try
/catch
块或重新显示异常:
catch(const Chaine::OutOfRangeException &e){
cerr<<"Erreur"<<endl;
throw;
}
char& Chaine::operator[](int index){
if(index < 0){
cerr<<"Erreur"<<endl;
throw OutOfRangeException();
}
return tab[index];
}
您的运算符重载不会重新引发异常,因此它永远不会在函数外部被“看到”。那么如何修复它?不要捕获异常,或者在捕获异常时,调用throw
重新引发异常,但运算符位于类链内,因此如何使其在函数外部可见?@Alicelangerton Pure“谢谢”这里不太欢迎评论。查看您可以做些什么来感谢用户的回答(尽管您根本没有被迫做任何事情)
char& Chaine::operator[](int index){
if(index < 0){
cerr<<"Erreur"<<endl;
throw OutOfRangeException();
}
return tab[index];
}