Parse error at "BOOST_JOIN"
尝试使用 Qt4 和 CGAL 编译代码时出现错误。我没有直接使用 Boost,我已经搜索并尝试了很多选项,比如-DBOOST_TT_HAS_OPERATOR_HPP_INCLUDED
and -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。关于可能导致该错误的任何想法?
3 回答
这个问题发生在 Boost 1.56.0 和 QT 4.7.4(现在已经很老了),
无论如何,另一个快速的解决方法是编辑有问题的 boost 头文件,并且
add to the top:
#ifndef Q_MOC_RUN
add to the bottom:
#endif
这至少会让 MOC 运行而不死。
当您编译一段定义 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.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 开发者会议的计划中。
我降级到 Boost 1.52,现在它正在编译。