1
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为什么?这里有什么问题?可能的解决方案是什么?

4

1 回答 1

1

您在函数generateVector内部错误地调用了该函数displayVector。它应该是这样的:

generateVector(count);

此外,您正在创建向量AB在函数内部创建函数,该函数generateVector将是函数的局部变量,thrust::generate并将对这些局部向量进行操作。全局向量不会被修改AB您应该删除局部向量以实现您想要的。而是要求host_vector::resize全局向量AB分配内存。

最终代码应该是这样的:

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;
}
于 2013-04-03T08:47:25.370 回答