使用“check”关键字混合Qt和boost会导致编译错误

时间:2011-12-16 22:08:59

标签: qt boost

我在项目中使用Qt,现在正尝试包含另一个使用boost的项目。 我在qt项目文件中为我的配置添加了no_keywords,以避免boost和Qt中存在的信号和插槽功能之间的冲突。但现在我得到一个编译错误,这似乎源于一个名为“check”的函数的双重定义。有没有办法避免这种情况?

一个例子是has_postfix_operator.hpp(第141行): static :: boost :: type_traits :: yes_type check(has_operator); //当运算符存在时,首选此版本

显然在Qt。中定义了“检查”。

我正在使用Qt4.7并提升1.48。运行MacOSX 10.6.8

1 个答案:

答案 0 :(得分:3)

您还应该查看/usr/include/AssertMacros.h,它定义了一个名为“check”的宏 - 这可能是您遇到问题的原因。

要检查此项,请在编译器标志中添加-d __ASSERT_MACROS_DEFINE_VERSIONS_WITHOUT_UNDERSCORES = 0。 如果可以,那就是你的问题。

以下是该文件的评论:

  

在Mac OS X 10.6之前,此文件中使用的宏名称存在冲突   使用一些用户代码,包括boost中的库和提议的C ++   标准的努力,这个标题的客户没有办法   解决这个冲突。因此,大多数宏已经存在   改变,以便它们加上前缀   __并包含至少一个大写字母,这应该可以缓解当前和未来的冲突。但是,要允许当前的来源   继续编译,最后定义了兼容性宏   旧名字。此文件末尾的tops脚本将进行转换   目录中用于新名称的所有旧宏名称。   建议客户端迁移到这些新宏   更新他们的来源,因为Mac OS X的未来版本将删除   旧的宏定义(没有双下划线前缀)。   想要在没有旧宏定义的情况下编译的客户端可以   定义宏   在包含此文件之前__ASSERT_MACROS_DEFINE_VERSIONS_WITHOUT_UNDERSCORES为0。