c++ boost qt4 cgal

c++ - Qt4+CGAL: error de análisis en "BOOST_JOIN"



(3)

Recibo el error Parse error at "BOOST_JOIN" al intentar compilar un código con Qt4 y CGAL. No estoy usando Boost directamente y ya he buscado y probado -DBOOST_TT_HAS_OPERATOR_HPP_INCLUDED opciones como -DBOOST_TT_HAS_OPERATOR_HPP_INCLUDED y -DBOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION . Las versiones con las que estoy trabajando son CGAL 4.1.0, Qt 4.8.4_6 y Boost 1.53.0_1, y usando CMake para generar el Makefile, en una máquina Mac OS 10.8.2. ¿Alguna idea de lo que podría estar causando ese error?


Bajé de categoría a Boost 1.52, y ahora está compilando.


Cuando compila un fragmento de código que define los objetos Qt, el sistema de compilación debe llamar al compilador de objetos Meta Qt , también conocido como "moc". En las versiones de Qt anteriores a 5.0, el compilador "moc" (en realidad un precompilador) no analiza correctamente todo el código C ++. En particular, no expande completamente las macros del preprocesador. En las versiones recientes de Boost, algunas macros (como la de BOOST_JOIN) se usan a veces para definir un nombre de espacio de nombres. Por ejemplo:

namespace BOOST_JOIN(BOOST_TT_TRAIT_NAME,_impl) {

en boost/type_traits/detail/has_binary_operator.hpp de Boost versión 1.53.

Se ha completado un error de Qt en Qt-Project.org y se dice que se corrigió en Qt-5.0 .

En CGAL -4.2, he intentado suprimir esos errores de compilación separando más el uso de Qt y Boost en diferentes unidades de compilación. Debe volver a intentarlo con una versión reciente de Boost y CGAL-4.2-beta1 (o versiones posteriores si se publican cuando lee esa respuesta). Avíseme si encuentra problemas similares con CGAL-4.2-beta1 o posterior.

En cuanto a Qt-5.0, espero que CGAL-4.3 lo soporte. Tendremos que trabajar en los scripts de CMake para soportarlo. Se agregará a la planificación de la próxima reunión de desarrolladores de CGAL.


Este problema ocurre en Boost 1.56.0 con QT 4.7.4 (que es bastante antiguo ahora),

Independientemente, otra solución rápida es editar los archivos de encabezado de aumento problemático, y

add to the top: #ifndef Q_MOC_RUN add to the bottom: #endif

Esto al menos permitirá a MOC correr sin morir.