Вам нужно catch
что вы throw
инг. Кроме того, оператор return
никогда не происходит, когда вы throw
. (Вы должны удалить строку, которая говорит:
return ret; // <--- Here is where the error occurs
Скорее всего, вы увидите предупреждение об этом компилятора (это код, который никогда не будет выполнен). Ваш код должен компилироваться без запинок. Всегда. (-Werror
флаг компиляции очень хорош для этого).
throw
означает: возврат, но не нормальный путь
Вам нужно сделать что-то вроде:
try {
Square a;
Circle b;
CircleSquare sum= a + b; // You try to sum
// If you can, the return statement will give a value to sum
// If you throw, sum will not get constructed,
// b and a will be destroyed and the catch
// will be executed instead of anything below
// the call to operator+
std::cout << "Sum is: " << sum << std::endl;
} catch (std::string s) {
// Will only catch exceptions of type std::string
std::cerr << "Error: " << s << std::endl;
}
Это "как", если вы сделали goto
для блока catch
, но очистили все.
Если вы не справитесь с этим, он все равно будет аварийно завершать каждую функцию, пока не найдет блок catch
правильного типа или пока не выйдет main
.