- ベストアンサー
例外処理がエラーを…(泣)
C++のプログラムを勉強しているのですが 例外処理の部分でエラーをはいてしまいます。 #include<iostream> using namespace std; void Xhandler(int test){ try{ if(test)throw test; else throw "Value is zero"; } catch(int i){ cout << "Caught One! Ex. #: " << i << "\n"; } catch(char *str){ cout << "Caught a string: " ≪ str << "\n"; } } int main(){ cout << "start\n"; Xhandler(1); Xhandler(2); Xhandler(0); Xhandler(3); cout << "end"; return 0; } 実行結果 start Caught One! Ex. #: 1 Caught One! Ex. #: 2 7[sig] 1705 3752 _cygtls::handle_exceptions: Error while dumping state(probably corrupted stack) Segmentation fault (core dumped) catch の char *str を str にして "Value is zero" を 'a' にしたら 予測通りの動作をしたのですが… catch に *str を使って文字列を投げてはいけないのでしょうか? よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
文字列定数なので、char*じゃなくて、const char*じゃないでしょうか? cygwinのgccではconst char*に変更で通りました。
その他の回答 (1)
- yone_sk
- ベストアンサー率34% (58/167)
私の環境だと正しく動きました。 (Borland C++ 5.5.1 for Win32) コンパイルが通らなかったので一部修正しましたが catch(char *str){ cout << "Caught a string: " ≪ str << "\n"; } ↓ catch(char *str){ cout << "Caught a string: " << str << "\n"; } 「≪」が記号になってたのは関係ないですか?
お礼
<<は質問ページにコピペではなく手打ちしたので その時のミスです。すみません。 プログラム上では<<になっています コンパイラにもよるのかもしれません。 私はCygwinのC++でコンパイルしています 別の方の回答で解決したのでとりあえず締め切らせて いただきます。ありがとうございました。
お礼
ありがとうございました。 ご指摘通り const をつけたら通りました。