在尝试使用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。什么可能导致错误的想法?
答案 0 :(得分:19)
这个问题发生在Boost 1.56.0和QT 4.7.4(现在已经很老了),
无论如何,另一个快速的解决方法是编辑有问题的boost头文件, 和
add to the top:
#ifndef Q_MOC_RUN
add to the bottom:
#endif
这至少会让MOC在没有死亡的情况下运行。
答案 1 :(得分:16)
当您编译定义Qt对象的代码时,构建系统需要调用Qt Meta Object Compiler,即“moc”。在5.0之前的Qt版本中,“moc”编译器(实际上是预编译器)无法正确解析所有C ++代码。特别是,它没有完全扩展预处理器宏。在最近的Boost版本中,有时使用某些宏(如BOOST_JOIN)来定义命名空间名称。例如:
namespace BOOST_JOIN(BOOST_TT_TRAIT_NAME,_impl) {
在Boost 1.53版的boost/type_traits/detail/has_binary_operator.hpp
中。
A Qt bug已在Qt-Project.org填写,且said to be fixed in 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开发者会议的计划中。
答案 2 :(得分:6)
我降级为Boost 1.52,现在正在编译。