我在项目中使用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
答案 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。