0

在我的代码中,我使用 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 

它是一个错误吗?

4

3 回答 3

11

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

例如,这个:

#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 命名空间。重命名命名空间很难看,但不会影响客户端代码。

于 2013-07-12T08:32:45.093 回答
3

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

于 2013-03-15T22:55:53.130 回答
2

这可能是由于 boost 和 Qt 之间的冲突引起的。看到这个帖子

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

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

于 2013-03-03T22:06:23.983 回答