取り組んでいる学校のプロジェクト全体でさまざまなエラーをキャッチするために使用しているカスタム例外が作成されています。
class WrongValueException : public std::runtime_error
{
public:
WrongValueException(std::string mess): std::runtime_error(mess) {};
};
問題は、以下のswitchステートメントのデフォルト句で「throwWrongValueException( "Error:Syntax");」を使用した場合です。
Expression* SubExpression::parse()
{
Expression* left;
Expression* right;
char operation, paren;
left = Operand::parse();
cin >> operation;
right = Operand::parse();
cin >> paren;
switch (operation)
{
case '+':
return new Plus(left, right);
case '-':
return new Minus(left, right);
case '*':
return new Times(left, right);
case '/':
return new Divide(left, right);
default:
throw WrongValueException("Error: Syntax - " + operation);
}
return 0;
}
基本的に、swtichステートメントに渡される文字は、例外をスローしたくない場合は、swtichステートメントにリストされている演算子の1つである必要があります。例外がスローされた場合、入力で指定された文字に基づいて変化する単一の文字だけが取得されます。
main関数でエラーをキャッチします。
入力と出力の例は次のとおりです。
Enter expression: (5^x),x=2;
#
Press any key to continue . . .
Enter expression: (5&x),x=2;
T
Press any key to continue . . .
「続行するには任意のキーを押してください...」の上の1文字は、オペレーターが変わると変わるものです。プログラムにある他のいくつかのチェックでこのエラーキャッチを正常に実装しました。スローは問題なくメインのtry/catch句までバブルします。これが唯一のものです。