11

現在、質問のタイトルで示した警告に似たコンパイラの警告が表示されています。などの警告...

warning: 'boost::system::generic_category' defined but not used

warning: 'boost::system::posix_category' defined but not used

warning: 'boost::system::errno_ecat' defined but not used

warning: 'boost::system::native_ecat' defined but not used

私の知る限り、プログラムは何の影響も受けていません。ただし、警告がぶら下がっているのは好きではありませんが、ブーストに関連して定義された何かが使用されていない場所にぶら下がっている以外に、これらの警告が何を伝えようとしているのかわかりません。しかし、私が定義したものはすべて、使用しました。私が使用しているブーストライブラリは、ランダムライブラリとファイルシステムライブラリです。

警告のソースを確認すると、Boostのerror_category.hppファイルが表示さstatic constれ、「事前定義されたエラーカテゴリ」または「非推奨の同義語」としてコメントされているいくつかのファイルが強調表示されます。たぶん、問題はライブラリを使用するときの私のエラー処理(または欠如)に関係していますか?

誰かがこれらの警告がポップアップする理由についていくつかの洞察を与えることができますか?私は完全に何かが欠けていますか?

PS警告は最大レベルです。

4

3 に答える 3

21

@Charles Salviaに同意しますが、少なくともBoost 1.44.0の時点では、これらの定義はラップされていることを追加したかった-非推奨として除外されます. したがって、それらを使用していない場合は、ヘッダー ファイルをインクルードする前に次の行をインクルードしてください。

#ifndef BOOST_SYSTEM_NO_DEPRECATED
#define BOOST_SYSTEM_NO_DEPRECATED 1
#endif
于 2010-09-17T16:14:47.210 に答える
7

これは、Boost.System ライブラリの error_code ライブラリに関連しています。Boost error_codes には、値とカテゴリの 2 つの属性が含まれます。ライブラリ ユーザーが独自のエラー カテゴリを設計できるように error_codes を拡張可能にするために、ブーストの設計者は、一意のエラー コード カテゴリを表す何らかの方法が必要でした。単純な ID 番号では十分ではありません。これは、2 つのプロジェクトがカスタム エラー カテゴリに対して競合する ID 番号を使用する可能性があるためです。

基本的に、彼らが行ったことは、基本クラスから継承する静的オブジェクトの形式で、メモリ アドレスを使用することでしたerror_category。これらの変数は、特定のエラー カテゴリの一意の識別子として機能すること以外、実際には何もしません。これらは本質的にメモリ内の一意のアドレスを持つ静的なダミー オブジェクトであるため、他のエラー カテゴリ "ID" に干渉しない独自のカスタム エラー カテゴリを簡単に作成できます。詳しくはこちらをご覧ください。

あなたが見ているのは、この設計上の決定の副作用だと思います。これらの変数は実際にはプログラムで使用されないため、コンパイラは警告を生成しています。言っておきますが、あなたは何も悪いことをしているとは思いません。

于 2009-11-29T04:05:39.637 に答える
1

私はBOOST_SYSTEM_NO_DEPRECATED@M.Tibbits によって提案されたものを試しましたが、(Linux で構築された大きなシステムで) 警告のいくつかのインスタンスを削除したように見えましたが、すべてではありませんでした。

ただし、ブーストヘッダーを含める-isystem代わりに使用し-Iて(そしてそれらの問題を無視して)、私にとってはうまくいきました。

https://exceptionshub.com/how-do-you-disable-the-unused-variable-warnings-coming-out-of-gcc.htmlによる提案

GNU GCC による (斜めに) 説明: http://gcc.gnu.org/onlinedocs/gcc/Directory-Options.html

于 2018-05-09T16:28:38.810 に答える