TBB parallel_for编译错误
TBB parallel_for compile error
我想使用TBB parallel_form,因为我的代码中有这个来测试
#include <tbb/parallel_for.h>
#include <tbb/blocked_range.h>
#include <tbb/tbb.h>
std::vector<std::tuple<std::string, unsigned int, std::string>> commands;
auto n = commands.size();
tbb::parallel_for(0, n, [&](int i) {
const auto &tuple = commands[i];
} );
我的编译行是:
g++ -std=c++11 -Wall -Wextra -g -Og TextMiningApp.cpp -ltbb -o TextMiningApp
我的编译器错误是:
TextMiningApp.cpp: In function ‘int main(int, char**)’:
TextMiningApp.cpp:184:7: error: no matching function for call to ‘parallel_for(int, long unsigned int&, main(int, char**)::<lambda(int)>)’
} );
^
In file included from TextMiningApp.cpp:15:0:
/usr/include/tbb/parallel_for.h:185:6: note: candidate: template<class Range, class Body> void tbb::parallel_for(const Range&, const Body&)
void parallel_for( const Range&
^
你有解决这个问题的办法吗?
代码的问题是0
的类型为int
,而n
的类型为std::size_t
。存在不匹配,您需要进行转换。解决方案如下:
tbb::parallel_for(static_cast<std::size_t>(0), n, [&](std::size_t i)) {
// other code
}
另一种解决方案是使用tbb::blocked_range<T>
来指定范围,即tbb::parallel_for
的另一个过载。
tbb::parallel_for(tbb::blocked_range<std::size_t>(0, n),
[&](const tbb::blocked_range<std::size_t> &range) {
for (auto i = range.begin(); i != range.end(); ++i)
const auto &tuple = commands[i];
} );
显然,第一个解决方案更简洁。然而,第二个更灵活。因为对于第一个,您只能指定循环体,而对于第二个,您可以在循环体之外执行更多操作。
相关文章:
- std::is_base_of表示ctor编译错误
- Qt5:使用QCommandLineParser类时出现奇怪的编译错误
- 如何修复sfml c++代码编译错误
- 使用 MATLAB 编码器生成C++代码:编译错误"undefined reference to `rgb2gray_tbb_real64'"
- 使用外部SDK工具链文件在VisualStudio上生成项目编译错误
- vscode下的Arduino代码出现意外编译错误
- 第三方 API 中的编译错误 - Visual Studio
- std::cout输出int时出现编译错误
- 奇怪的代码抛出编译错误模板< J,int aSize=10> C2143:语法错误:在"<"之前缺少";"
- 提升图广度优先搜索前置编译错误
- C++ 中的编译错误:未定义对"主"的引用 collect2:错误:ld 返回 1 个退出状态
- 使用带有 ref 参数的成员函数创建线程时出现编译错误
- 我在C++中遇到了这个奇怪的编译错误
- 在C++中使用 Catch 测试框架编译错误"error: expected ';' at end of declaration list"
- 使用 std::enable_if 限制派生类的模板参数时出现编译错误
- 现代OpenGL和GLEW Libraray的编译错误
- C++ 编译错误:意外的类型名称"字符串":预期的表达式
- C ++程序编译错误,找不到/访问文件
- 使用直接大括号初始化时,C++ 编译错误"声明末尾的预期";"
- 为什么传递非静态成员函数会导致编译错误?