2010-03-30 106 views
-1

有人能告訴我將多個向量傳遞給只能使用一個參數的函數的正確方法嗎? (專爲在pthread_create(..)函數)通過引用傳遞多個向量以使用函數(使用結構)

我嘗試以下,但它似乎沒有:-(

一上班,我創建了以下結構

struct ip2 

{ 

    void* obj; 
    int dim; 
    int n_s; 
    vector<vector<vector<double> > > *wlist; 
    vector<int> *nrsv; 
    struct model *pModel; 

}; 

的線程我實際上已經創建需要所有這些參數。由於使用pthreads_create我把所有這一切在一結構,然後傳遞的指針結構作爲參數給pthread_create(如圖所示)IM。

some_fxn() 

{ 

    //some code 

    struct ip2 ip; 

    ip.obj=(void*) this; 

    ip.n_s=n_s; 

    ip.wlist=&wlist; 

    ip.nrsv=&nrsv; 

    ip.pModel=pModel; 

    ip.dim=dim; 

    pthread_create(&callThd1[lcntr], &attr1, &Cls::Entry, (void*) &ip); 

} 

Entry方法看起來像這樣。

void* Cls::Entry(void *ip) 

{ 

    struct ip2 *x; 
    x = (struct ip2 *)ip; 
    (reinterpret_cast<Cls1 *>(x->obj))->Run(x->dim,x->n_s, x->wlist, x->nrsv, x->pModel); 


} 

Run方法看起來像這樣。

void Run(int dim, int n_c, vector<vector<vector<double> > > *wlist, vector<int> *nrsv, struct model* pModel) 

{ 

    //some code 
     for(int k = 0; k < n_c; ++k) 
    { 
     //some code 

    end = index + nrsv[k]; 

    //some code 

} 

當我嘗試編譯程序時出現以下錯誤。

error: no match for ‘operator+’ in ‘index + *(((std::vector<int, std::allocator<int> >*)(((unsigned int)k) * 12u)) + nrsv)’

誰能告訴我該怎麼做正確的方式。

Madhavan表示

+3

請不要將地址傳遞給pthread_create調用中的局部變量。 – 2010-03-30 17:02:13

+0

'end = index + nrsv [k];' - 什麼是'end'?什麼是'索引'?什麼是'nrsv'? nrsv不能是矢量。 'nrsv'可以是'vector ','vector ','vector *'等。 – 2010-03-30 17:05:06

+0

Hi Tuomas, 您是否指向struct聲明?我也讓它成爲全球。 謝謝。 – madman 2010-03-30 19:57:33

回答

0

NRSV是vector<int>*,對不對?所以你需要做end = index + (*nrsv)[k];(取消引用)。

+0

注:我沒有真正查看實際的代碼,我只是看着你報告的特定編譯錯誤。 – 2010-03-30 17:04:28

+0

是的,它的作品..我忘了解除引用! 謝謝! – madman 2010-03-30 17:41:57

+0

沒問題!儘管如此,你應該真的聽取其他人的意見。特別是Tuomas。 – 2010-03-30 17:51:01