2011-12-16 100 views
0

我在一个项目中使用Qt,现在试图包含另一个使用boost的项目。 我在qt项目文件中为我的配置添加了no_keywords,以避免boost和Qt中存在的信号和插槽功能之间的冲突。但是现在我得到了一个编译错误,这个错误似乎源于一个名为“check”的函数的双重定义。有什么方法可以避免这种情况?混合Qt和boost导致编译错误与“检查”关键字

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

显然在Qt中有一个“检查”。

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

回答

3

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

要检查这一点,请将-d __ASSERT_MACROS_DEFINE_VERSIONS_WITHOUT_UNDERSCORES = 0添加到您的编译器标志。 如果可行,那是你的问题。

下面是该文件的注释:

在此之前的Mac OS X 10.6在这个文件中使用的宏名与一些用户代码发生冲突 ,包括Boost库和所提出的C++ 标准的努力,这个头部的客户端无法通过 解决这个冲突。由于这个原因,大多数宏已被更改为 ,因此它们的前缀为 __并且至少包含一个大写字母,这将缓解当前和未来的冲突。但是,为了允许当前源代码继续编译,最后使用 这个旧名称来定义兼容性宏。这个文件末尾的顶部脚本会将 目录中使用的所有旧宏名称转换为新名称。 建议客户端迁移到这些新的宏,因为他们 更新其来源,因为未来版本的Mac OS X将删除 旧宏定义(不带双下划线前缀)。 想要在没有旧宏定义的情况下编译的客户端可以在包含此文件之前将 宏__ASSERT_MACROS_DEFINE_VERSIONS_WITHOUT_UNDERSCORES定义为0。