thrust::host_vector<int> A;
thrust::host_vector<int> B;
int rand_from_0_to_100_gen(void)
{
return rand() % 100;
}
__host__ void generateVector(int count) {
thrust::host_vector<int> A(count);
thrust::generate(A.begin(),A.end(),rand_from_0_to_100_gen);
thrust::host_vector<int> B(count);
thrust::generate(B.begin(),B.end(),rand_from_0_to_100_gen);
}
__host__ void displayVector(int count){
void generateVector(count);
cout << A[1];
}
在上面的代码中,为什么我无法显示矢量值?
给出了错误void generateVector(count);
说incomplete is not allowed
为什么?这有什么不对?可能的解决办法是什么?
答案 0 :(得分:1)
您正在函数generateVector
内错误地调用函数displayVector
。它应该是这样的:
generateVector(count);
此外,您正在函数A
内创建向量B
和generateVector
,它们将是函数的本地元素,thrust::generate
将对这些局部向量进行操作。不会修改全局向量A
和B
。您应该删除本地向量以实现您想要的。而是为全局向量host_vector::resize
和A
调用B
来分配内存。
最终的代码应该是这样的:
thrust::host_vector<int> A;
thrust::host_vector<int> B;
int rand_from_0_to_100_gen(void)
{
return rand() % 100;
}
__host__ void generateVector(int count)
{
A.resize(count);
thrust::generate(A.begin(),A.end(),rand_from_0_to_100_gen);
B.resize(count);
thrust::generate(B.begin(),B.end(),rand_from_0_to_100_gen);
}
__host__ void displayVector(int count)
{
generateVector(count);
cout << A[1]<<endl;
}