2010-03-30 3 views
-1

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

+3

Veuillez ne pas passer une adresse à une variable locale dans l'appel pthread_create. –

+0

'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. –

+0

Salut Tuomas, Faites-vous référence à la déclaration de struct? Je le fais aussi mondial. Merci. – madman

Répondre

0

TOB est un vector<int>*, non? Donc, vous devez faire end = index + (*nrsv)[k]; (déréférencer).

+0

Note: Je n'ai pas vraiment regardé le code réel, je regardais juste l'erreur de compilation particulière que vous avez rapportée. –

+0

oui ça marche .. j'ai oublié de le déréférencer! Merci! – madman

+0

Pas de problème! Vous devriez vraiment vraiment écouter les commentaires de ces autres personnes. Particulièrement Tuomas. –

Questions connexes