有人能告诉我将多个向量传递给只能使用一个参数的函数的正确方法吗? (特别是对于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(如图所示)。
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先生
答案 0 :(得分:0)
nrsv是vector<int>*
,对吗?所以你需要做end = index + (*nrsv)[k];
(取消引用它)。