为什么编译器出错?

时间:2013-04-03 08:30:55

标签: cuda compiler-errors thrust

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为什么?这有什么不对?可能的解决办法是什么?

1 个答案:

答案 0 :(得分:1)

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

generateVector(count);

此外,您正在函数A内创建向量BgenerateVector,它们将是函数的本地元素,thrust::generate将对这些局部向量进行操作。不会修改全局向量AB。您应该删除本地向量以实现您想要的。而是为全局向量host_vector::resizeA调用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;
}