'boost :: Q_FOREACH'尚未宣布

时间:2013-03-03 21:55:44

标签: c++ qt boost

在我的代码中,我使用boost(1.52)和qt(4.8.3),我遇到的第一个编译错误如下

D:\qt\4.8.3\x86_64-w64-mingw32\include/QtCore/qglobal.h:2439:21: error: 'boost::Q_FOREACH' has not been declared 

这是一个错误吗?

3 个答案:

答案 0 :(得分:9)

使用#include <QObject>启动.cpp文件。

例如,这个:

#include <boost/foreach.hpp>
#include <QObject>
#include <boost/multi_index/hashed_index.hpp>

...编译为error: 'boost::Q_FOREACH' has not been declared,而这个:

#include <QObject>
#include <boost/foreach.hpp>
#include <boost/multi_index/hashed_index.hpp>

......编译得很好。


qglobal.h(包含在所有Qt标头中)创建一个宏#define foreach Q_FOREACH,它在boost::foreach::foonamespace foreach等引用中展开,但仅限于宏声明后遇到的引用。在早期定义宏时,所有引用都以相同的方式扩展。

我在示例中使用了hashed_index.hpp,因为它碰巧使用了foreach命名空间。重命名命名空间很难看,但它不会影响客户端代码。

答案 1 :(得分:3)

对于遇到此问题的其他人,另一种解决方法是在Qt包含

之前包含Boost

答案 2 :(得分:2)

这可能是由于boost和Qt之间的冲突造成的。见post

有人建议在项目文件中使用CONFIG + = no_keywords。

但我也看到了解决此问题的机票已关闭.. https://svn.boost.org/trac/boost/ticket/6455 所以不确定这是否可以帮助你解决问题