2009-11-29 5 views
11

私は現在、質問タイトルで与えた警告に似たコンパイラの警告を受け取ります。など....私の知る限り、プログラムがどのような方法で影響を受けていない知っているようboost :: system ::(...)_カテゴリが定義されていますが使用されていません

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が強調表示されます。たぶん問題は、ライブラリを使用しているときのエラー処理(または不足)と何か関係がありますか?

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

P.S.警告は最大レベルです。

答えて

7

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

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

あなたが見ているのは、このデザイン決定の副作用だと思います。これらの変数は実際にプログラムで使用されることはないため、コンパイラは警告を生成しています。私はあなたが何か間違っているとは思わないと言えば十分です。

+0

を、私は同じ問題を抱えているが、私のリンカがジョブを完了していないので、それは確かのように見えます大きな問題は私が見る限りです。 – Rhubarb

+12

...これのために '-Werror'を使用できなくなることを除いて、 – vladr

20

私は@Charles Salviaに同意しますが、少なくともBoost 1.44.0の時点でこれを追加したいと考えていました。これらの定義は現在廃止されており、非推奨となっています。だから、あなたがそれらを使用していない場合は、ちょうどあなたがヘッダファイルが含ま前に次の行を含める:

#ifndef BOOST_SYSTEM_NO_DEPRECATED 
#define BOOST_SYSTEM_NO_DEPRECATED 1 
#endif 
+0

私はそれを定義していますが、警告をスケルチしません。 –

+2

それは私のために働いた。 –

+0

IMOこれは答えか、-Dコンパイラフラグを使用してこの定義を指定する必要があります。 – ColinCren

関連する問題