混合使用Qt和boost会导致编译错误;勾选“;关键词

混合使用Qt和boost会导致编译错误;勾选“;关键词,qt,boost,Qt,Boost,我正在一个项目中使用Qt,现在正试图包括另一个使用boost的项目。 我在qt项目文件中的配置中添加了no_关键字,以避免boost和qt中存在的信号和插槽功能之间的冲突。但现在我得到了一个编译错误,它似乎源于名为“check”的函数的双重定义。有没有办法避免这种情况 例如has_postfix_operator.hpp(第141行): static::boost::type_traits::yes_type check(has_操作符);//当操作员存在时,首选此版本 显然,Qt中定义了一个“

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

例如has_postfix_operator.hpp(第141行): static::boost::type_traits::yes_type check(has_操作符);//当操作员存在时,首选此版本

显然,Qt中定义了一个“检查”


我使用的是Qt4.7和boost 1.48。运行MacOSX 10.6.8时,还应该查看/usr/include/AssertMacros.h,它定义了一个名为“check”的宏,这可能是问题的原因

要检查这一点,请在编译器标志中添加-d uu断言u宏u定义u版本u,不带下划线=0。 如果这行得通,那就是你的问题

以下是该文件中的注释:

在Mac OS X 10.6之前,此文件中使用的宏名称存在冲突 使用一些用户代码,包括Boost中的库和C++ 标准的努力,并且没有办法让此标题的客户端 解决这一冲突。正因为如此,大多数宏都被删除了 已更改,因此它们的前缀为 __并至少包含一个大写字母,这将缓解当前和未来的冲突。然而,为了允许电流源 继续编译,兼容性宏在末尾定义为 老名字。此文件末尾的tops脚本将转换为 将目录中使用的所有旧宏名称转换为新名称。 建议客户端在运行时迁移到这些新宏 更新其源代码,因为Mac OS X的未来版本将删除 旧的宏定义(不带双下划线前缀)。 希望在没有旧宏定义的情况下编译的客户端可以 定义宏 __在包含此文件之前,将不带下划线的断言\u宏\u定义\u版本\u设置为0


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

要检查这一点,请在编译器标志中添加-d uu断言u宏u定义u版本u,不带下划线=0。 如果这行得通,那就是你的问题

以下是该文件中的注释:

在Mac OS X 10.6之前,此文件中使用的宏名称存在冲突 使用一些用户代码,包括Boost中的库和C++ 标准的努力,并且没有办法让此标题的客户端 解决这一冲突。正因为如此,大多数宏都被删除了 已更改,因此它们的前缀为 __并至少包含一个大写字母,这将缓解当前和未来的冲突。然而,为了允许电流源 继续编译,兼容性宏在末尾定义为 老名字。此文件末尾的tops脚本将转换为 将目录中使用的所有旧宏名称转换为新名称。 建议客户端在运行时迁移到这些新宏 更新其源代码,因为Mac OS X的未来版本将删除 旧的宏定义(不带双下划线前缀)。 希望在没有旧宏定义的情况下编译的客户端可以 定义宏 __在包含此文件之前,将不带下划线的断言\u宏\u定义\u版本\u设置为0