OpenVDB错误:Q_FOREACH传递了3个参数,但只有2个

时间:2015-04-24 00:11:33

标签: c++ qt

我刚刚安装了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的不同文件中的不同代码块)。有谁知道我做错了什么?

3 个答案:

答案 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以获得想法。