有人能告訴我將多個向量傳遞給只能使用一個參數的函數的正確方法嗎? (專爲在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表示
請不要將地址傳遞給pthread_create調用中的局部變量。 – 2010-03-30 17:02:13
'end = index + nrsv [k];' - 什麼是'end'?什麼是'索引'?什麼是'nrsv'? nrsv不能是矢量。 'nrsv'可以是'vector','vector ','vector *'等。 –
2010-03-30 17:05:06
Hi Tuomas, 您是否指向struct聲明?我也讓它成爲全球。 謝謝。 – madman 2010-03-30 19:57:33