Quelqu'un peut-il me dire la bonne façon de transmettre plusieurs vecteurs à une fonction qui ne peut prendre qu'un seul argument? (Spécifiquement pour pthread_create (..) Fonction)Passage de vecteurs multiples pour fonctionner par référence (en utilisant la structure)
j'ai essayé ce qui suit, mais il ne semble pas fonctionner :-(
D'abord, j'ai créé la structure suivante
struct ip2
{
void* obj;
int dim;
int n_s;
vector<vector<vector<double> > > *wlist;
vector<int> *nrsv;
struct model *pModel;
};
Les fils que je ont créé des besoins en fait tous ces paramètres. Depuis im en utilisant pthreads_create je mets tout cela dans une structure, puis passé le pointeur sur la structure comme argument pour pthread_create (comme indiqué).
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);
}
La méthode Entry ressemble à ceci.
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);
}
La méthode Run ressemble à ceci. Je reçois l'erreur suivante lorsque j'essaie de compiler le programme.
error: no match for ‘operator+’ in ‘index + *(((std::vector<int, std::allocator<int> >*)(((unsigned int)k) * 12u)) + nrsv)’
Quelqu'un peut-il me dire comment faire de la bonne façon.
Madhavan
Veuillez ne pas passer une adresse à une variable locale dans l'appel pthread_create. –
'end = index + nrsv [k];' - Qu'est-ce que 'end'? Qu'est-ce que 'index'? Qu'est-ce que 'nrsv'? nrsv ne peut pas être vecteur. 'nrsv' peut être' vecteur ',' vecteur ',' vecteur * 'etc. –
Salut Tuomas, Faites-vous référence à la déclaration de struct? Je le fais aussi mondial. Merci. – madman