我刚刚安装了OpenVDB,我正在尝试从here(Ubuntu 14.04 + QtCreator 3.4.0 + GCC_64)编译基本示例。前两个例子工作正常,但第三个例子没有 - 一旦我包含“LevelSetSphere.h”,它会产生一堆错误。最常见的错误是“Q_FOREACH传递3个参数,但只需2个”并引用代码
void foreach(const NodeOp& op, bool threaded = true, size_t grainSize=1)
{
NodeTransformer<NodeOp> transform(op);
transform.run(this->nodeRange(grainSize), threaded);
}
NodeManager.h中的(其他错误指的是OpenVDB的不同文件中的不同代码块)。有谁知道我做错了什么?
答案 0 :(得分:1)
要共同使用QT和OpenVDB,只需在包含openvdb.h之前使用以下预处理器指令:
#ifdef foreach
#undef foreach
#endif
#include <openvdb/openvdb.h>
//[...] here foreach is defined by openvdb and there is no foreach QT macro
使用此解决方案,您无法使用QT foreach宏。如果您使用的是C ++ 11
,仍然可以使用ranged based for答案 1 :(得分:0)
Andrew Medico是对的。 OpenVDB定义了自己的foreach
,因此它与Qt不兼容。但是,如果您手动重命名OpenVDB中的所有foreach
,则可以使其正常工作。
答案 2 :(得分:0)
问题出现是因为Qt定义了一个Q_FOREACH
宏,它与'openvdb / util / NodeMask.h'中的foreach方法冲突。要消除此冲突,只需将openvdb和Qt一起包含在内的任何位置都取消定义。您可以查看此Github拉取请求https://github.com/JimJam42/OpenVDBViewer/pull/1以获得想法。