Exceção de arremesso de C ++ Re dá erro
-
26-09-2019 - |
Pergunta
Estou tentando capturar uma exceção 'específica' (formatexception^ou o flowexception^) e depois jogue -o e pegue -o na exceção 'geral' (exceção^) Bloco de captura.
Quando executado, dou uma exceção de formato através da entrada. Em seguida, recebo esse erro em uma caixa de diálogo: "Uma exceção não tratada do tipo 'System.Formatexception' ocorreu em FutureValue.exe Informações adicionais: a string de entrada não estava em um formato correto." Quando clico em 'quebrar', leva -me à linha # 232.
Aqui está o código parcial:
try
{
...
}
catch(FormatException^ ex)
{
MessageBox::Show("FormatException Occured. Message: " + ex->Message);
throw;
}
***line# 232*** catch(OverflowException^ ex)
{
MessageBox::Show("Overflow Occured. Message: " + ex->Message);
throw;
}
catch(Exception^ ex)
{
MessageBox::Show("TESTING");
}
Solução
A expressão do Rethrow (arremesso sem atribuição_expression) faz com que o objeto originalmente jogado seja renegado. Como a exceção já foi capturada no escopo em que a expressão de Rethrow ocorre, ela é retirada para o próximo bloco de tentativa dinamicamente que envolve. Portanto, não pode ser tratado por blocos de captura no escopo em que a expressão de Rethrow ocorreu.
Levando em consideração, convém escrever seu código como este:
try
{
try
{
//...
}
catch(FormatException^ ex)
{
MessageBox::Show("FormatException Occured. Message: " + ex >Message);
throw;
}
catch(OverflowException^ ex)
{
MessageBox::Show("Overflow Occured. Message: " + ex->Message);
throw;
}
}
catch(Exception^ ex)
{
MessageBox::Show("TESTING");
}
Outras dicas
Existe uma tentativa de captura de captura acima disso?
Você acabou de lançar uma exceção com a declaração de arremesso, ninguém está pegando. O depurador levou você a onde a exceção foi lançada