2016-12-19 97 views
0

如何將對象向量傳遞給pthread_create函數?將對象向量傳遞給pthread_create

我有這樣的代碼:

#define THREAD_NUMBER 1000 

void* threadRoom (std::vector <Room*> &rooms){ 

some code here.... 
} 

int main() { 

std::vector <Room*> rooms; 
std::vector <pthread_t> workers(THREAD_NUMBER); 
pthread_create(&workers[0], NULL, threadRoom, &rooms); 

return 0; 
} 

我真的收到這些錯誤:

error: invalid conversion from ‘void* (*)(std::vector<Room*>&)’ to ‘void* (*)(void*)’ [-fpermissive] 
pthread_create(&worker[0], NULL, threadRoom, &rooms); 

note: initializing argument 3 of ‘int pthread_create(pthread_t*, const pthread_attr_t*, void* (*)(void*), void*)’ 
extern int pthread_create (pthread_t *__restrict __newthread 
+1

您正在將'rooms'的指針傳遞給'pthread_create',但您的'threadRoom'函數需要引用。 – 1201ProgramAlarm

回答

0

嗯,是。 pthread_create()要求其第三個參數的類型爲void* (*)(void *),並且您傳遞的是類型爲void* (*)(std::vector<Room*>&)的參數。這些不兼容。你的線程函數聲明的參數類型必須是void *

您可以將實際(指針)參數強制轉換爲void *,並且threadRoom()將其轉換回預期的類型。這不是類型安全的,但它實際上是預期的用法(雖然它是一個C API,而C不需要強制轉換)。