2010-03-30 3 views
-1

하나의 인수 만 사용할 수있는 함수에 여러 벡터를 전달하는 올바른 방법을 누군가에게 알려주시겠습니까? (구체적으로는 pthread_create에 대한 (..) 함수)여러 벡터를 참조로 함수에 전달 (구조체 사용)

나는 다음과 같은 있지만

먼저 :-(작동하지 않는 시도, 나는 다음과 같은 구조

struct ip2 

{ 

    void* obj; 
    int dim; 
    int n_s; 
    vector<vector<vector<double> > > *wlist; 
    vector<int> *nrsv; 
    struct model *pModel; 

}; 

스레드를 생성하는 I 메신저가 나는 구조에서이 모든 것을 넣고 (그림 참조) 앞서 pthread_create 인수로 구조체에 대한 포인터를 전달 pthreads_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); 

} 

엔트리 메소드는 다음과 유사합니다.

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)’

는 사람이 어떻게 올바른 방법을 말해 줄 수 있습니다.

마드 하반

+3

pthread_create 호출에서 로컬 변수에 주소를 전달하지 마십시오. –

+0

'end = index + nrsv [k];'-'end'는 무엇입니까? 'index' 란 무엇입니까? 'nrsv' 란 무엇입니까? nrsv는 벡터 일 수 없습니다. 'nrsv'는'벡터 ','벡터 ','벡터 *'등일 수 있습니다. –

+0

안녕하세요 투 오마스, 구조체 선언을 말하는 겁니까? 나는 또한 그것을 세계적으로 만든다. 감사합니다. . – madman

답변

0

NRSV, 오른쪽 vector<int>*입니까? 따라서 end = index + (*nrsv)[k]; (역 참조)을 수행해야합니다.

+0

참고 : 실제 코드를 많이 살펴 보지 않았습니다.보고 한 특정 컴파일 오류 만보고있었습니다. –

+0

예 그것은 작동합니다. 나는 그것을 역 참조하는 것을 잊었습니다! 감사합니다. – madman

+0

괜찮습니다! 다른 사람들의 의견도 들어야합니다. 특히 투 오마스. –