C++で例外処理で文字列を送出するパターンとクラスを送出するパターンで分けたい
C++の例外処理を勉強中です。
例外処理で「const char*」を受け取る場合と、
「クラス型」を受け取る場合を実装したのですが、
「クラス型」のcatchを後に記述すると、「const char+」の例外処理しか実行されません。
「クラス型」は先に記載するしか対応方法はないのでしょうか?
また、「const char*」の文字列も文字化けしてしまい、正しく表示されません。
実行結果【正常時】
0~100の整数を入力してください:0 正常動作 範囲内です。
実行結果【例外 文字列を受け取ることを想定】
0~100の整数を入力してください:-1 文字列のキャッチ d@ // 「負の数が入力されました。」と表示したいが文字化けする
実行結果【例外 クラス型を受け取ることを想定】
0~100の整数を入力してください:101 文字列のキャッチ // クラス型ではなく「const char*」のcatchが動いてしまう。
該当のソースコード
cpp
1#include <iostream> 2 3using namespace std; 4 5class ErrorOverFlow{}; 6 7bool check_0_100(int x){ 8 if(x < 0) 9 throw "負の数が入力されました。"; 10 else if(x > 100) 11 throw ErrorOverFlow(); 12 else 13 return true; 14} 15 16int main(){ 17 int num; 18 cout << "0~100の整数を入力してください:"; 19 cin >> num; 20 21 try{ 22 if(check_0_100(num)){ 23 cout << "正常動作" << endl; 24 cout << "範囲内です。" << endl; 25 } 26 } 27 28 catch(const char* str){ 29 cout << "文字列のキャッチ" << endl; 30 cout << str << endl; 31 } 32 33 catch(ErrorOverFlow){ 34 cout << "クラスのキャッチ" << endl; 35 cout << "100より大きな数値が入力されました。" << endl; 36 } 37}
試したこと
①「catch(ErroOverFlow)」を「catch(const char* str)」より先に記載
⇒catch(ErroOverFlow)の動作をすることを確認
補足情報(FW/ツールのバージョンなど)
・OS:Windows10
・ターミナル:powershell
・コンパイラ:g++ Ver5.3.0
・エディタ:VS Code
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/15 15:08