19

Parse error at "BOOST_JOIN"尝试使用 Qt4 和 CGAL 编译代码时出现错误。我没有直接使用 Boost,我已经搜索并尝试了很多选项,比如-DBOOST_TT_HAS_OPERATOR_HPP_INCLUDEDand -DBOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION。我正在使用的版本是 CGAL 4.1.0、Qt 4.8.4_6 和 Boost 1.53.0_1,并在 Mac OS 10.8.2 机器中使用 CMake 生成 Makefile。关于可能导致该错误的任何想法?

4

3 回答 3

21

这个问题发生在 Boost 1.56.0 和 QT 4.7.4(现在已经很老了),

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

add to the top:
#ifndef Q_MOC_RUN

add to the bottom:
#endif

这至少会让 MOC 运行而不死。

于 2014-08-08T01:37:59.073 回答
18

当您编译一段定义 Qt 对象的代码时,构建系统需要调用Qt Meta Object Compiler,也就是“moc”。在 5.0 之前的 Qt 版本中,“moc”编译器(实际上是预编译器)不能正确解析所有 C++ 代码。特别是,它没有完全扩展预处理器宏。在最近的 Boost 版本中,有时会使用一些宏(例如 BOOST_JOIN)来定义命名空间名称。例如:

namespace BOOST_JOIN(BOOST_TT_TRAIT_NAME,_impl) {

boost/type_traits/detail/has_binary_operator.hppBoost 版本 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 开发者会议的计划中。

于 2013-03-18T10:15:08.760 回答
6

我降级到 Boost 1.52,现在它正在编译。

于 2013-03-17T03:04:08.827 回答