C++ 错误:当需要异常时,未引发异常

C++ 错误:当需要异常时,未引发异常,c++,exception,C++,Exception,我创建了一个异常:OutOfRangeException char& Chaine::operator[](int index){ try{ if((index < 0)){ throw OutOfRangeException(); } } catch(const Chaine::OutOfRangeException &e){ cerr<<"Erreur"<

我创建了一个异常:OutOfRangeException

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];
}