OpenVDB错误:Q_FOREACH传递了3个参数,但只接受了2个
OpenVDB error: Q_FOREACH passed 3 arguments, but takes just 2
我刚刚安装了OpenVDB,我正试图从这里编译基本示例(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的不同文件中的不同代码块)。有人知道我做错了什么吗?
要联合使用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 上,你仍然可以使用基于范围的
Andrew Medico是对的。OpenVDB定义了自己的foreach
,因此它与Qt不兼容。但是,如果手动重命名OpenVDB中的所有foreach
,则可以使其工作。
问题的出现是因为Qt定义了一个Q_FOREACH
宏,该宏与'openvdb/util/NodeMask.h'中的foreach方法冲突。要消除此冲突,只需在openvdb和Qt同时包含的位置取消定义此宏。你可以看看这个Github拉取请求https://github.com/JimJam42/OpenVDBViewer/pull/1来获得这个想法。
相关文章:
- 模板-模板参数推导:三个不同的编译器三种不同的行为
- 在不传递参数数量且只有3个点的情况下,如何使用变差函数
- 带有多个独立参数的C++For循环
- 表达式 SFINAE:如何根据类型是否包含具有一个或多个参数的函数来选择模板版本
- 具有多个转换的模板参数推导
- 具有两个间接寻址运算符 (C++) 的函数参数的用途
- 如何将可变参数模板转换为多个单个模板?(C++竞争编程调试模板)
- 如何允许模板参数中的类类型,仅当它有两个基类时
- c++ 构造函数 将 1 个字符串参数转换为 3 个属性
- 运算符重载:"operator+"必须采用零个或一个参数
- C++部分概念 id:显式模板规范顺序/第一个参数的特殊状态的原因是什么?
- 为什么 c++11 std::lock 和 std::scoped_lock 至少需要 2 个参数?
- 具有多个参数的模板化类专用化,其中一个模板参数是模板本身
- 我应该如何在没有变量的情况下将相同的参数传递给 CMAKE 中的多个目标?
- C++如果两个模板函数都与参数列表匹配,将调用哪个模板
- 如何实现具有多个平台__FILE__和__LINE__信息的 C/C++ 可变参数日志记录宏?
- 如何从两个不同的函数传递参数
- 为什么C CHAR数据类型3D数组通过参数第一个括号为空白
- 什么时候使用size_t作为模板函数的参数是个坏主意
- 警告:正在传递第1个参数(共个)..从不带强制转换的整数生成指针