"no instance of overloaded function "转换“匹配参数列表”并行执行错误
"no instance of overloaded function "transform" matches the argument list" error with parallel execution
我有一个看似简单的 C++17 问题。在下面的代码中,只有最后一行在我尝试并行执行时产生错误:
vector<double> v(1000);
transform(v.begin(), v.end(), v.begin(), [](double a) { return 2.0 * a; }); // This is fine
transform(std::execution::par, v.begin(), v.end(), v.begin(), [](double a) { return 2.0 * a; }); // std::execution::par does not seem to of the right type
看起来 std::execution::par
的类型错误,导致“没有重载函数实例“transform”匹配参数列表”错误。我将 C++17 与 Visual Studio 19 一起使用,其中智能还可以。错误出现在编译过程中。可能是什么问题?
编辑:
这是完整的错误消息:
1>c:\users\*\file_path_name.cpp(128): error : name followed by "::" must be a class or namespace name
1>
1>c:\users\*\file_path_name.cpp(128): error : no instance of overloaded function "transform" matches the argument list
1> argument types are: (<error-type>, std::_Vector_iterator<std::_Vector_val<std::conditional_t<true, std::_Simple_types<double>, std::_Vec_iter_types<double, size_t, ptrdiff_t, double *, const double *, double &, const double &>>>>, std::_Vector_iterator<std::_Vector_val<std::conditional_t<true, std::_Simple_types<double>, std::_Vec_iter_types<double, size_t, ptrdiff_t, double *, const double *, double &, const double &>>>>, std::_Vector_iterator<std::_Vector_val<std::conditional_t<true, std::_Simple_types<double>, std::_Vec_iter_types<double, size_t, ptrdiff_t, double *, const double *, double &, const double &>>>>, lambda [](double)->double)
1>
找到问题了。 Cuda 正在干扰它。切换到非 cuda 控制台项目解决了这个问题。
我有一个看似简单的 C++17 问题。在下面的代码中,只有最后一行在我尝试并行执行时产生错误:
vector<double> v(1000);
transform(v.begin(), v.end(), v.begin(), [](double a) { return 2.0 * a; }); // This is fine
transform(std::execution::par, v.begin(), v.end(), v.begin(), [](double a) { return 2.0 * a; }); // std::execution::par does not seem to of the right type
看起来 std::execution::par
的类型错误,导致“没有重载函数实例“transform”匹配参数列表”错误。我将 C++17 与 Visual Studio 19 一起使用,其中智能还可以。错误出现在编译过程中。可能是什么问题?
编辑: 这是完整的错误消息:
1>c:\users\*\file_path_name.cpp(128): error : name followed by "::" must be a class or namespace name
1>
1>c:\users\*\file_path_name.cpp(128): error : no instance of overloaded function "transform" matches the argument list
1> argument types are: (<error-type>, std::_Vector_iterator<std::_Vector_val<std::conditional_t<true, std::_Simple_types<double>, std::_Vec_iter_types<double, size_t, ptrdiff_t, double *, const double *, double &, const double &>>>>, std::_Vector_iterator<std::_Vector_val<std::conditional_t<true, std::_Simple_types<double>, std::_Vec_iter_types<double, size_t, ptrdiff_t, double *, const double *, double &, const double &>>>>, std::_Vector_iterator<std::_Vector_val<std::conditional_t<true, std::_Simple_types<double>, std::_Vec_iter_types<double, size_t, ptrdiff_t, double *, const double *, double &, const double &>>>>, lambda [](double)->double)
1>
找到问题了。 Cuda 正在干扰它。切换到非 cuda 控制台项目解决了这个问题。