Qt4 + CGAL - "BOOST_JOIN"时解析错误

Qt4 + CGAL - Parse error at "BOOST_JOIN"

本文关键字:错误 JOIN BOOST CGAL Qt4      更新时间:2023-10-16

在试图编译Qt4和CGAL代码时,我得到了错误Parse error at "BOOST_JOIN"。我没有直接使用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在机器Mac OS 10.8.2中生成Makefile。知道是什么导致了这个错误吗?

这个问题发生在Boost 1.56.0与QT 4.7.4(这是相当旧的现在),

无论如何,另一个快速的解决方法是编辑有问题的boost头文件,和

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

当你编译一段定义Qt对象的代码时,构建系统需要调用Qt元对象编译器,也就是"moc"。在5.0之前的Qt版本中,"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的一个bug已经在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,现在正在编译