Подтвердить что ты не робот

Qt4 + CGAL - Ошибка анализа на "BOOST_JOIN"

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

4b9b3361

Ответ 1

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

Независимо, еще одним быстрым решением является редактирование проблемных файлов заголовков boost, и

add to the top:
#ifndef Q_MOC_RUN

add to the bottom:
#endif

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

Ответ 2

Когда вы компилируете фрагмент кода, который определяет объекты Qt, системе сборки необходимо вызвать Qt Meta Object Compiler, также известный как "moc", В версиях Qt до 5.0 компилятор "moc" (фактически прекомпилятор) не корректно анализирует весь код на С++. В частности, он не полностью расширяет макросы препроцессора. В последних версиях 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. ​​

Ответ 3

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