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\type_traits\detail\has_binary_operator.hpp
  • boost\type_traits\detail\has_postfix_operator.hpp
  • boost\type_traits\detail\has_prefix_operator.hpp

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

  • boost\type_traits\has_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个人觉得可行! 
时间: 2024-08-11 09:53:13

CGAL+QT4.84+Boost1.53 错误[Parse error at "BOOST_JOIN"]的相关文章

PHP错误Parse error: syntax error, unexpected end of file in test.php on line 12解决方法

今天在写PHP程序的时候总是出现这样的错误:Parse error: syntax error, unexpected end of file in *.php on line *,然后我就根据提示,找到那个文件,然后错误中总是提示最后一行出错,我找到最后一行发现是</html>,晕的,这能有什么错误,找了好久才找到问题所在,拿来分享. 出现这个错误的原因就是语法错误,肯定是PHP程序的书写不规范造成,我后来一条一条看才发现,原来是PHP语句标识符错了,正常情况下应该是这样的:<?php

Parse error: syntax error, unexpected end of file in *.php on line * 解决方法

Parse error: syntax error, unexpected end of file in *.php on line * 解决方法 这篇文章主要介绍了PHP错误Parse error: syntax error, unexpected end of file in test.php on line 12解决方法,需要的朋友可以参考下 今天在写PHP程序的时候总是出现这样的错误:Parse error: syntax error, unexpected end of file in

使用 trait 时报PHP Parse error: syntax error, unexpected &#39;use&#39; (T_USE) 这个错误

找一大圈原因, 最后终于找到了, 不是PHP版本的原因[], 是自己把use 写到了类里的方法里了. 这个东东,  不能脱离类单独使用, 否则的话, 会被认为是命名空间了. 测试例子如下 // Trait.php trait CustomerFunctionsTrait { public function plus ( $a = 1, $b = 1 ) { echo $a + $b; } public function minus ( $a = 5, $b = 1 ) { echo $a - $

[ExtJS5学习笔记]第二十七节 CMD打包错误 Error C2009: YUI Parse Error (identifier is a reserved word =&gt; debugger;)

本文地址:http://blog.csdn.net/sushengmiyan/article/details/41242993 本文作者:sushengmiyan ------------------------------------------------------------------------------------------------------------------------------------ 使用cmd打包ext的时候报了一个诡异的错误.细细找来,发现是代码书写

[ExtJS5学习笔记]第二十七节 CMD打包错误 Error C2009: YUI Parse Error (identifier is a reserved word =&amp;gt; debugger;)

本文地址:http://blog.csdn.net/sushengmiyan/article/details/41242993 本文作者:sushengmiyan ------------------------------------------------------------------------------------------------------------------------------------ 使用cmd打包ext的时候报了一个诡异的错误. 细细找来,发现是代码书

PHP提示:Parse error: syntax error, unexpected T_ECHO 解决方案

对于PHP开发新手来说,经常因为代码问题出现各种报错,比如: 提示:Parse error: syntax error, unexpected T_ECHO....在某某文件, 我的经验是:出现unexpected T_ECHO这个,一般都是中文符号 或者是缺标点符号! 通过测试输出方式找到错误区域,好好检查看看是不是标点符号为中文状态,或者是少了标点...

解决:sudo: parse error in /etc/sudoers near line 24 ...报错

ubuntu系统下由于添加用户权限的时候直接用的vim对 /etc/sudoers 文件编辑,保存退出的时候,再使用sudo su 等等命令一直报错如下: sudo: parse error in /etc/sudoers near line 24 sudo: no valid sudoers sources found, quitting sudo: unable to initialize policy plugin 原因是直接用vim修改文件时报错,参考Google说,应该用visudo命

java.lang.IllegalArgument,Parse error in application web.xml file at jndi:/localhost/WEB-INF/web.xml

启动Tomcat时错误:java.lang.IllegalArgumentException: Can't convert argument: nullParse error in application web.xml file at jndi:/localhost/WEB-INF/web.xml Resolution:上述问题,是由于在Eclipse下重构JEE项目名时,Eclipse自动更新了部署文件web.xml,重新生成了xml文件的头部声明,新增加了javaee的命名空间. Xml代

Parse error: syntax error, unexpected T_STRING in D:\workspaces\0428\0630\08-returntype.php on line 4

那你有权限查看修改服务器的php.ini吗?你查看一下服务器的php.ini找到:short_open_tag = Off这一行,如果short_open_tag = On,那么你就把它改成Off因为如果这个为On,就意味着运行这样的php代码:<? echo '...';?>也就是说<? ?>等同于<?php ?>所以你第一行的<?xml version="1.0" encoding="UTF-8"?>就被服务器认为