2017-11-27 7 views
0

저는 cpp 및 스레드의 초보자입니다. stackoverflow의 일부 코드 단편을 참조하여 pthread 함수에 여러 인수를 전달하고 아래 코드를 작성했습니다. 나는 (void *) 포인터를 사용하여 함수 내부의 구조체 멤버에 액세스하는 방법을 잘 모르겠습니다. 아무도 설명 할 수 있을까요?pthread 함수에 여러 매개 변수 전달 및 액세스

#include <iostream> 
#include <pthread.h> 
#include <vector> 
using namespace std; 

struct a{ 
vector <int> v1; 
int val; 
}; 

void* function(void *args) 
{ 
vector <int>functionvector = (vector <int>)args->v1; 
functionvector.push_back(args->val); 
return NULL; 
} 


int main() 
{ 
    pthread_t thread; 
    struct a args; 

    pthread_create(&thread, NULL, &function, (void *)&args); 
    pthread_join(thread,NULL); 
    for(auto it : args.v1) 
    { 
    cout<<it; 
    } 

    return 0; 
} 

오류를 가져 오기 : 오류 : '무효 *'은 아닙니다 포인터로 객체 타입

+0

캐스팅 한 유형으로 다시 캐스트해야합니다. '& args'는'a *'입니다. – molbdnilo

+0

pthread가 아닌 std :: thread를 사용하십시오. –

답변

1

당신이 a*에 다시 void* 캐스팅 할 때까지 당신은 a의 멤버에 액세스 할 수 없습니다.

void* function(void *ptr) 
{ 
a* args = static_cast<a*>(ptr); 

args->v1.push_back(args->val); 
return NULL; 
} 
+0

죄송합니다. 알았다! 감사. – newbie