myW*_*SON 8 c++ qt boost c-preprocessor qt5
在qt 4.8我使用了boost(1.52)这一切都很好......现在我尝试移动到QT5并在线获得if.hpp: Macro argument mismatch错误131 BOOST_MPL_AUX_NA_SPEC(3, if_).在一些QT论坛中,提出了这样的解决方案:
#ifndef Q_MOC_RUN
// All boost includes
#endif // Q_MOC_RUN
Run Code Online (Sandbox Code Playgroud)
在我的每个使用boost的文件中......所以这里的问题是 - 如何告诉提升QT还没有准备好,BOOST_MPL_AUX_NA_SPEC并且该提升应该使用一些更原始的预处理器语法,它将与QT5兼容?
更新:发现这个解决方案但似乎没有在Qt5中带来任何影响=(
这是我在网上淘几个小时后能找到的最好的解决方法.这基本上是其他人一直在说的,但有一些澄清.
通过将以下代码添加到项目文件(例如myproject.pro),可以最轻松地完成此操作:
# ensure QMAKE_MOC contains the moc executable path
load(moc)
# for each Boost header you include...
QMAKE_MOC += -DBOOST_INCLUDE_GUARD_GOES_HERE
Run Code Online (Sandbox Code Playgroud)例如,如果我想使用日志库,我会:
#include <boost/log/trivial.hpp>
Run Code Online (Sandbox Code Playgroud)
如果我打开头文件,我可以在顶部看到include guard被命名BOOST_LOG_TRIVIAL_HPP_INCLUDED_.因此,.pro文件中的相应行将显示为:
QMAKE_MOC += -DBOOST_LOG_TRIVIAL_HPP_INCLUDED_
Run Code Online (Sandbox Code Playgroud)
如果它们与任何人相关,还有几个注意事项:
小智 2
我刚刚遇到了同样的问题,并在 Qt 论坛上找到了有用的信息。
以下是 Qt 错误报告和 Qt 论坛线程,其中包含问题的有用描述和解决方法:
https://bugreports.qt-project.org/browse/QTBUG-29331
http://qt-project.org/forums/viewthread/22993/