CGAL+QT4.84+Boost1.53 错误[Parse error at "BOOST_JOIN"]

安装CGAL后,运行demo程序出现[Parse error at "BOOST_JOIN"]这样的错误字样。

解决方案主要是参考这个网址。
https://bugreports.qt-project.org/browse/QTBUG-22829
由于是英文,在昨晚状态不佳的情况下,我硬是没看懂。接下来说说这个上面的讨论情况和我自己的解决方案。
上面的问题描述大体是这样:我原来安装的是Qt+boost1.47,后来我将boost升级到boost1.48,结果就出现这样的问题(我的boost为1.53版本):
"Parse error at "BOOST_JOIN", pointing to boost/type_traits/detail/has_binary_operator.hp(50)
然后我将boost换回1.47就没有这样的问题了。将我的问题向boost小组报告,结果是Qt的moc编译器和boost不兼容的问题。
讨论了几种解决方案(绿色的表示最可行的解决方案,可以只关注绿色的部分):
 
解决方案1:

能引起moc编译器崩溃的BOOST_JOIN 宏主要在这几个文件中:

  • boost ype_traitsdetailhas_binary_operator.hpp
  • boost ype_traitsdetailhas_postfix_operator.hpp
  • boost ype_traitsdetailhas_prefix_operator.hpp

他们最终被包含(原作者认为)在:

  • boost ype_traitshas_operator.hpp

has_operator.hpp 使用header guards "BOOST_TT_HAS_OPERATOR_HPP_INCLUDED", 因此组织moc对含有BOOST_JOIN的宏进行编译。

对于使用cmake的用户,具体操作是:

QT4_WRAP_CPP(sources ${moc-sources} OPTIONS -DBOOST_TT_HAS_OPERATOR_HPP_INCLUDED)

解决方案2:

通过这个 方法#ifndef Q_MOC_RUN,使moc看不见使用了带有BOOST_JOIN宏头文件的头文件 

#ifndef Q_MOC_RUN  
#include <boost/python.hpp>
#endif
解决方案3: 

Qt5.0已经解决moc的这个问题了。所以可以选择安装Qt5.0,但是Qt5.0只能安装在VS2010以上,而我使用的是VS2008,因此,我没有进行尝试。

自己的解决方案(可以说是最懒惰的方法了)

将boos1.53换成boost1.47。

另外,我的软件版本为:

改动前:CGAL4.1+Boost1.53+Qt4.8.4+libQGLViewer2.3.17

改动后:CGAL4.1+Boost1.47+Qt4.8.4+libQGLViewer2.3.17

另外,我的安装过程主要参考CGAL的网站:

http://www.cgal.org/windows_installation.html

说明:以上,对于那个英文网站的理解也许还有些问题,望指正!另外,由于不大熟悉cmake,因此解决方案1理解的不是很透彻,如果有理解的可以指导一下,十分欢迎!并且解决方案1并不能解决所有的问题,正如接下来的讨论一样,为BOOST_JOIN宏不只在那三个文件中,其他的文件也包含这个宏。解决方案2个人觉得用起来很麻烦,我尝试了很久也没有把所有的引用了包含BOOST_JOIN宏的头文件的头文件找出来。解决方案3个人觉得可行! 
原文地址:https://www.cnblogs.com/jast/p/4141228.html