質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.50%

  • C++

    3455questions

    C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

vs2017の例外処理について

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 321
退会済みユーザー

退会済みユーザー

基本の文なのですが、うまくいきません。
助けてください。
調べていると、vs2005以降は例外処理をするのに設定がいると書いてあったので
clean-mobile-phone.com
その通り設定してもうまくいきません。
教えてください

http://kagasu.hatenablog.com/entry/2017/05/04/223252
このサイトを参考にしました

include <iostream>

using namespace std;

int main()
{
int num;
cout << "1~9までの数を入力してください。\n";
cin >> num;

try{
if(num <= 0)
throw "0以下を入力しました。";
if(num >= 10)
throw "10以上を入力しました。";
cout << num << "です。\n";
}

catch(char* err){
cout << "エラー:" << err << '\n';
return 1;
}

return 0;
}

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • episteme

    2018/04/12 21:36

    「うまくいきません」を説明すべし

    キャンセル

  • can110

    2018/04/12 21:37

    「うまくいきません」とは?→https://teratail.com/help/question-tips#questionTips3

    キャンセル

  • y_waiwai

    2018/04/12 21:37

    設定、というのはなにをどう設定したのでしょう

    キャンセル

  • episteme

    2018/04/13 07:32

    わかってねぇなー... 「うまくいきません」を説明するとは、「期待する挙動」「やったこと」「実際の挙動」を述べることだ。

    キャンセル

回答 2

checkベストアンサー

+1

C++において文字列リテラルはconst char[]型になります。 参考
よってchar*で受け取る事はできません。
catch(const char* err){になるかと思います。

質問する場合の基本ですが一度質問するときのヒントに目を通しましょう。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/04/12 21:59

    すみません。
    以後気を付けます

    キャンセル

  • 2018/04/13 10:16

    catchのreturn 1を消すとうまく行ったのですがこれでよかったのでしょうか?

    キャンセル

  • 2018/04/13 10:25

    '正常終了'でいいのですか?

    キャンセル

0

例外としてどんなものでも投げられるけど、できることなら標準例外を投げるのをオススメします。

#include <iostream>
#include <stdexcept>

using namespace std; 

int main() {
  int num;
  cout << "1~9までの数を入力してください。\n";
  cin >> num; 

  try{
    if ( num <= 0 )
      throw out_of_range("0以下を入力しました。");
    if ( num >= 10 )
      throw out_of_range("10以上を入力しました。");
    cout << num << "です。\n";
  } catch ( const logic_error& err ){
    cout << "エラー:" << err.what() << endl;
    return 1;
  }
}

あるいはせめて:

#include <iostream>
#include <exception>

using namespace std; 

int main() {
  int num;
  cout << "1~9までの数を入力してください。\n";
  cin >> num; 

  try{
    if ( num <= 0 )
      throw exception("0以下を入力しました。");
    if ( num >= 10 )
      throw exception("10以上を入力しました。");
    cout << num << "です。\n";
  } catch ( const exception& err ){
    cout << "エラー:" << err.what() << endl;
    return 1;
  }
}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/04/13 10:13

    return 1を消すとうまく行ったのですが、これでよかったでしょうか?

    キャンセル

  • 2018/04/13 10:14

    catch のreturn1です

    キャンセル

  • 2018/04/13 10:15

    return 1 があるとなにがどう「うまくいかない」ですか?

    キャンセル

  • 2018/04/13 10:18

    例えば-1をいれると終了していたのですが、ちゃんとcatchの内容を表示されるようになりました

    キャンセル

  • 2018/04/13 10:28

    ...コマンドラインから実行すれば、入力:-1に対してcatch節にある出力が行われます。
    1. どうやって実行していますか? 
    2. IDEから"デバッグなしで開始"(Ctrl+F5)するとどうですか?

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.50%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    golang error => too many arguments to return

    下記のgetRssUrl 関数で、   return "", retErr 部分が   too many arguments to return となってしまいます。何故でしょうか

  • 解決済

    2重ループのプログラム

    現在forの2重ループで下のような図形ができるように下のプログラムを書いたのですが、うまくいきません。なぜ下のプログラムではいけないのかは大体わかるのですが、どのように直せばうまく

  • 受付中

    JavaScriptの綺麗なコードの書き方

    JavaScriptの綺麗なコードの書き方がわかりません。 例えば下記のような関数があった場合、皆さんならどのようにまとめますか?   function userLogin() {

  • 解決済

    fs.renameSyncで移送先のファイルがWindowsから認識されない。

    お世話になります。 ご存じの方見えましたら、解決策について お知恵お貸し下さい。。。 あるログファイルを作って、 時間が来たらローテーション(下層フォルダへ退避)しようと考えてい

  • 解決済

    皆様のお答えを聞かせてください。打ちこんだ整数を逆に並べて出力する

    このコードはマイナスの値を打つと、アラームが鳴り整数値を打つように 指示します。そして整数値が打ちこまれると、それを10で割り余りを出す、10で割るという繰り返しで引っくり返した数

  • 受付中

    点数別分布グラフ

    点数分布のグラフですが、少し長いように感じました。もう少し短くすることはできますか? またこのコードに対して何かご意見がありましたらお願いします。 #inc

  • 解決済

    出入力c++

    入出力のコードを書いていたのですが、エラーがでてしまいます。 問題点を指摘してくださるとうれしいです。 コード /*  * stream.cpp  *  *  Created on

  • 解決済

    ライブラリにあるファンクションを使わずに文字列を数値に変換するには?

    C++初心者です。既にライブラリにあるファンクション(atoiやstoi)を使わずに文字列Stringを数値intに変換するプログラムを作りたいです。 期待する結果:例えばユー

同じタグがついた質問を見る

  • C++

    3455questions

    C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。