我是C ++的新手,我希望在推力库中有一个具有合理步长的矢量。我写了这些代码,当我试图将向量A定义为指针时,它给了我一个错误。如果有人能告诉我我的代码有什么问题,我会感激不尽。
void Vector_Initialize (thrust::host_vector<double> *A, double lb, double delta)
{
for (int i = 0; i < A.size(); i++)
A[i] = lb + i * delta;
}
int main()
{
thrust::host_vector<double> h_V(10);
//thrust::sequence(h_V.begin(), h_V.end(), 20, 0.4);
double lb=20, delta=0.4;
Vector_Initialize(h_V, lb, delta);
for (int i = 0; i < 10; i++)
{
std::cout<<h_V[i]<<std::endl;
}
std::cout<< "size of vector is" << h_V.size()<<std::endl;
return 0;
}
这是错误:
Error 1 error : expression must have class type H:\...\kernel.cu 16 1 CUDATUt13
Error 2 error : no operator "=" matches these operands H:\...\kernel.cu 17 1 CUDATUt13
Error 3 error : identifier "$h_V" is undefined H:\....\kernel.cu 24 1 CUDATUt13
答案 0 :(得分:0)
功能应该是
void Vector_Initialize (thrust::host_vector<double>& A, double lb, double delta)
所以A
是引用,而不是指针。如果你想使用指针,你应该用
Vector_Initialize(&h_V, lb, delta);
和重写函数,用于指向矢量的指针。
答案 1 :(得分:0)
void Vector_Initialize (thrust::host_vector<double> *A, double lb, double delta)
应替换为
void Vector_Initialize (thrust::host_vector<double> &A, double lb, double delta)
*A
表示A是指针(可以是一个向量或数组或向量)。 &A
表示A是reference。
如果您仍想坚持*A
(不推荐),请替换
for (int i = 0; i < A.size(); i++)
A[i] = lb + i * delta;
与
for (int i = 0; i < A->size(); i++)
(*A)[i] = lb + i * delta;
并将h_V
的地址传递给Vector_Initialize函数。