有人能告诉我将多个向量传递给只能使用一个参数的函数的正确方法吗? (专为在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