gpt4 book ai didi

c++ - std::function 参数是不完整的类型,不允许

转载 作者:搜寻专家 更新时间:2023-10-31 00:11:28 25 4
gpt4 key购买 nike

我正在尝试将 lambda 分配给 std::function ,像这样:

std::function<void>(thrust::device_vector<float>&) f;
f = [](thrust::device_vector<float> & veh)->void
{
thrust::transform( veh.begin(), veh.end(), veh.begin(), tanh_f() );
};

我得到一个错误:

 error: incomplete type is not allowed
error: type name is not allowed

我认为它指的是thrust::device_vector<float> .我尝试对参数进行类型命名和类型定义:

typedef typename thrust::device_vector<float> vector;
std::function<void>(vector&) f;
f = [](vector & veh)->void
{
thrust::transform( veh.begin(), veh.end(), veh.begin(), tanh_f() );
};

没有用。但是,如果我只使用 lambda(没有 std::function),它就可以工作:

typedef typename thrust::device_vector<float> vector;
auto f = [](vector & veh)->void
{
thrust::transform( veh.begin(), veh.end(), veh.begin(), tanh_f() );
};

我错过了什么?PS:我正在使用 nvcc release 6.5, V6.5.12 进行编译和 g++ (Debian 4.8.4-1) 4.8.4

最佳答案

你使用了错误的语法。

尝试 std::function<void(thrust::device_vector<float>&)> f;相反

std::function<void(thrust::device_vector<float>&)> f;声明一个类型为 std::function<void(thrust::device_vector<float>&)> 的变量,这是一个接受 thrust::device_vector<float>& 的函数对象并返回 void

g++ 给你不完整的类型错误,因为 std::function<void>不是有效的模板实例。

clang++ 给你一个更好的错误信息告诉你 std::function<void>() f;是一个无效的变量声明:

main.cpp:11:28: error: expected '(' for function-style cast or type construction
std::function<void>(int) f;
~~~^
1 error generated.

关于c++ - std::function 参数是不完整的类型,不允许,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33929276/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com