C ++ Re رمي الاستثناء يعطي خطأ
-
26-09-2019 - |
سؤال
أحاول التقاط استثناء "محدد" (Formatexception^أو OverflowException^) ثم إعادة رميه وتلتقطه في كتلة الاستثناء (استثناء^).
عند التشغيل ، أعطيها استثناء تنسيق من خلال الإدخال. أحصل بعد ذلك على هذا الخطأ في مربع حوار: "استثناء غير معقول من النوع" system.formatexception "حدث في FutureValue.exe معلومات إضافية: سلسلة الإدخال لم تكن بتنسيق صحيح." عندما أنقر "كسر" يستغرق الأمر لي إلى السطر رقم 232.
هنا هو الرمز الجزئي:
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");
}
المحلول
يؤدي تعبير reethrow (رمي بدون issignment_expression) إلى إعادة تدوير الكائن الذي تم إلقاؤه في الأصل. نظرًا لأن الاستثناء قد تم القبض عليه بالفعل في النطاق الذي يحدث فيه تعبير Rethrow ، فإنه يتم إعادة تدويره إلى كتلة Try Try المرفقة التالية. لذلك ، لا يمكن التعامل معها بواسطة كتل الصيد في النطاق الذي حدث فيه تعبير Rethrow.
مع الأخذ أعلاه في الاعتبار ، قد ترغب في كتابة رمزك مثل هذا:
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");
}
نصائح أخرى
هل هناك مجموعة من المحاولة فوق هذا؟
لقد ألقيت استثناءً من بيان الرمي ، لا أحد يصطاده. لقد أخذك مصحح الأخطاء إلى حيث تم إلقاء الاستثناء