2010-03-30 109 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