Я получаю ошибку 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 и использование CMake для генерации Makefile в Mac OS 10.8.2. Есть идеи, что может быть причиной этой ошибки?
Эта проблема возникает в Boost 1.56.0 с QT 4.7.4 (который сейчас довольно старый),
В любом случае, еще один быстрый обходной путь — это редактировать проблемные файлы заголовков,
а также
add to the top:
#ifndef Q_MOC_RUN
add to the bottom:
#endif
Это, по крайней мере, позволит МОК бежать без смерти.
Когда вы компилируете фрагмент кода, который определяет объекты Qt, система сборки должна вызвать Qt Meta Object Compiler, он же «мок». В версиях Qt до 5.0 компилятор «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, и теперь он компилируется.