2014-07-24 98 views
0

我是新的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

究竟是什麼錯誤? – talonmies

回答

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功能。

+0

你可以檢查實時解決方案的工作[這裏](http://ideone.com/7rSzMv)和[這裏](http://ideone.com/stfRmT) –

+0

它的工作原理。謝謝 – mohsen67

0

功能應該是

void Vector_Initialize (thrust::host_vector<double>& A, double lb, double delta) 

所以A是參考,而不是一個指針。如果你想使用指針你應該調用函數與

Vector_Initialize(&h_V, lb, delta); 

和重寫函數的指針指向矢量。