Qt4 + CGAL — Ошибка разбора в & quot; BOOST_JOIN & quot;

Я получаю ошибку 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. Есть идеи, что может быть причиной этой ошибки?

18

Решение

Эта проблема возникает в Boost 1.56.0 с QT 4.7.4 (который сейчас довольно старый),

В любом случае, еще один быстрый обходной путь — это редактировать проблемные файлы заголовков,
а также

add to the top:
#ifndef Q_MOC_RUN

add to the bottom:
#endif

Это, по крайней мере, позволит МОК бежать без смерти.

19

Другие решения

Когда вы компилируете фрагмент кода, который определяет объекты 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.

16

Я понизил до Boost 1.52, и теперь он компилируется.

6