web-dev-qa-db-ja.com

Qt4 + CGAL-「BOOST_JOIN」での解析エラー

Qt4とCGALでコードをコンパイルしようとすると、エラーParse error at "BOOST_JOIN"が発生します。私はBoostを直接使用しておらず、-DBOOST_TT_HAS_OPERATOR_HPP_INCLUDED-DBOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATIONなどのオプションをすでに検索して試しました。私が使用しているバージョンは、CGAL 4.1.0、Qt 4.8.4_6、Boost 1.53.0_1であり、マシンMac OS10.8.2でCMakeを使用してMakefileを生成します。そのエラーの原因となる可能性のあるアイデアはありますか?

19
Mauricio Zambon

この問題は、Boost1.56.0とQT4.7.4(現在はかなり古い)で発生します。

とにかく、別の簡単な回避策は、問題のあるブーストヘッダーファイルを編集することです。

add to the top:
#ifndef Q_MOC_RUN

add to the bottom:
#endif

これにより、少なくともMOCは死なずに実行できます。

21
elegant dice

Qtオブジェクトを定義するコードをコンパイルする場合、ビルドシステムは Qtメタオブジェクトコンパイラ 、別名「moc」を呼び出す必要があります。 5.0より前のQtバージョンでは、「moc」コンパイラ(実際にはプリコンパイラ)はすべてのC++コードを正しく解析しません。特に、プリプロセッサマクロを完全に拡張するわけではありません。最近のBoostバージョンでは、名前空間名を定義するために一部のマクロ(BOOST_JOINなど)が使用されることがあります。例えば:

namespace BOOST_JOIN(BOOST_TT_TRAIT_NAME,_impl) {

boost/type_traits/detail/has_binary_operator.hppBoostバージョン1.53の。

Qtのバグ はQt-Project.orgで埋められており、 Qt-5.0で修正されたと言われています です。

[〜#〜] cgal [〜#〜] -4.2では、異なるコンパイル単位でのQtとBoostの使用をさらに分離することにより、これらのビルドエラーを抑制しようとしました。 Boostの最新バージョンとCGAL-4.2-beta1(またはその回答を読んだときにリリースされた場合はそれ以降のバージョン)で再試行する必要があります。 CGAL-4.2-beta1以降で同様の問題が発生した場合はお知らせください。

Qt-5.0に関しては、CGAL-4.3がサポートしてくれることを願っています。それをサポートするには、CMakeスクリプトに取り組む必要があります。これは、次回のCGAL開発者会議の計画に追加されます。

17
lrineau

Boost 1.52にダウングレードしましたが、コンパイル中です。

6
Mauricio Zambon