2011-12-16 8 views
0

私はプロジェクトでQtを使用しています。ブーストを使用する別のプロジェクトを追加しようとしています。 boostとQtに存在するシグナルとスロットの機能の衝突を避けるために、qtプロジェクトファイルの設定にno_keywordsを追加しました。しかし、今私は "チェック"と呼ばれる関数の二重定義に起因するように見えるコンパイルエラーを取得します。これを避ける方法はありますか?Qtとブーストを混ぜると、 "check"キーワードでコンパイルエラーが発生する

例は、has_postfix_operator.hpp(行141)です。 static :: boost :: type_traits :: yes_type check(has_operator); //演算子が存在する場合はこのバージョンが優先

Qtには「チェック」が定義されているようです。

私はQt4.7を使用しており、1.48をブーストしています。 MacOSX 10.6.8を実行しています

答えて

3

"check"という名前のマクロを定義している/usr/include/AssertMacros.hも参照してください。これは問題の原因となります。

これを確認するには、-d __ASSERT_MACROS_DEFINE_VERSIONS_WITHOUT_UNDERSCORES = 0をコンパイラフラグに追加します。 それがうまくいくなら、それはあなたの問題でした。

ここでは、そのファイルからのコメントです:このファイルで使用されるマクロ名は、ブーストの図書館と提案したC++ 標準化の取り組みを含め、いくつかのユーザーコードで を矛盾以前のMac OS X 10.6へ

、および へのこのヘッダーのクライアントがこの競合を解決する方法はありませんでした。このため、ほとんどのマクロは に変更されており、接頭辞は __で、少なくとも1つの大文字が含まれているため、現在および将来の競合が緩和されます。しかし、現在のソースを にコンパイルし続けるために、互換性マクロは最後に の古い名前で定義されています。このファイルの最後にあるtopsスクリプトは、ディレクトリ内で使用されているすべての古いマクロ名を新しい名前に変換します( )。 クライアントは、新しいマクロに移行することをお勧めします。 は、Mac OS Xの将来のリリースで古いマクロ定義(ダブルアンダースコアなし)を削除します。 古いマクロ定義を使用せずにコンパイルしたいクライアントは、 このファイルがインクルードされる前に、マクロ __ASSERT_MACROS_DEFINE_VERSIONS_WITHOUT_UNDERSCORESを0に定義することができます。

関連する問題