하나의 인수 만 사용할 수있는 함수에 여러 벡터를 전달하는 올바른 방법을 누군가에게 알려주시겠습니까? (구체적으로는 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)’
는 사람이 어떻게 올바른 방법을 말해 줄 수 있습니다.
마드 하반
pthread_create 호출에서 로컬 변수에 주소를 전달하지 마십시오. –
'end = index + nrsv [k];'-'end'는 무엇입니까? 'index' 란 무엇입니까? 'nrsv' 란 무엇입니까? nrsv는 벡터 일 수 없습니다. 'nrsv'는'벡터','벡터 ','벡터 *'등일 수 있습니다. –
안녕하세요 투 오마스, 구조체 선언을 말하는 겁니까? 나는 또한 그것을 세계적으로 만든다. 감사합니다. . – madman