Parse error at "BOOST_JOIN"
Qt4 と CGAL でコードをコンパイルしようとすると、エラーが発生します。私は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 OS 10.8.2 のマシンで CMake を使用して Makefile を生成しています。そのエラーの原因について何か考えはありますか?
3 に答える
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.hpp
Boost バージョン 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 開発者会議の計画に追加されます。
Boost 1.52にダウングレードしましたが、コンパイル中です。