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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

g++

g++はGNUコンパイラコレクション(gcc)のC++コンパイラーです。

C++

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

MinGW

MinGW(ミン・ジー・ダブリュー)は GNUツールチェーンのWindows移植版です。 ランタイムライブラリと開発ツールで構成されています。

Q&A

解決済

1回答

3148閲覧

例外のcatchに関して警告が出る

bob2017

総合スコア18

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

g++

g++はGNUコンパイラコレクション(gcc)のC++コンパイラーです。

C++

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

MinGW

MinGW(ミン・ジー・ダブリュー)は GNUツールチェーンのWindows移植版です。 ランタイムライブラリと開発ツールで構成されています。

0グッド

0クリップ

投稿2018/01/27 08:12

編集2018/01/27 08:14

前提・実現したいこと

例外のcatch処理に警告が出ました。

発生している問題・エラーメッセージ

warning: exception of type 'boost::system::system_error' will be caught catch(boost::system::system_error& e) warning: by earlier handler for 'std::exception' catch(std::exception& e)

該当のソースコード

C++

1#include <exception> 2#include <boost/system/system_error.hpp> 3#include <boost/system/error_code.hpp> 4 5try 6{ 78} 9catch(std::exception& e) 10{ 11 cerr << "standard c++ library exception was occured.\n"; 12 cerr << "error message: " << e.what() << '\n'; 13 return 1; 14} 15catch(boost::system::system_error& e) 16{ 17 cerr << "boost exception was occured.\n"; 18 cerr << "error code:\t" << e.code().value() << '\n'; 19 cerr << "error message:\t" << e.what() << '\n'; 20 return 1; 21} 22catch(...) 23{ 24 cerr << "error.\n"; 25 return 1; 26}

どうすれば、この警告は出なくなるのでしょうか。
どうか、よろしくお願いします。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

こんにちは。

例外はcatchの順序に従って処理されます。
先に書いたcatchで捕まえることが出来る場合、後に書いたcatchでは捕まえられません。
boost::system::system_errorはstd::exceptionを継承している筈です。
従って、boost::system::system_error例外が投げられた時、それは、catch(boost::system::system_error& e)ではなくcatch(std::exception& e)でcatchされます。
この状況はプログラマが意図していないケースが大半なので警告がでているのだと思います。

対処するにはこの2つのcatchの順序を逆にすれば良い筈です。

投稿2018/01/27 08:16

編集2018/01/27 08:17
Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

bob2017

2018/01/27 08:19

とても分かりやすく、解決方法まで説明していただき、本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問