2016-07-22 24 views
0

我有一個函數指針,我試圖傳遞給一個類方法,其中pthread_create將被調用傳遞該參數。但我收到了一些錯誤,並不確定我想從哪裏出發。C++傳遞函數指針兩次導致問題

void (*FuncPointer)(void*); 
FuncPointer = random_function; 
ThreadPool.Task(FuncPointer); 


int IOThreadPool::Task(void* (*FuncPointer)(void*)) 
{ 
    pthread_t NewThread; 

    int rc = pthread_create(&NewThread, NULL, FuncPointer, (void *) (intptr_t) IOThreadPool::Threads.size() + 1); 

main.cpp:57:29: error: invalid conversion from ‘void* (*)()’ to ‘void (*)(void*)’ [-fpermissive]

請解釋爲什麼即使我把它當作void* (*)(void*),我得到void* (*)()。我很困惑,我的頭已經開始受傷了!

感謝

+0

你能提供random_function嗎?它有正確的簽名? – Dutow

回答

1
invalid conversion from ‘void* (*)()’ to ‘void (*)(void*)’ 

你忘了我們展示的random_function的聲明,但是從錯誤信息來看,這似乎是

void* ranfom_function() 

由於函數簽名不匹配FuncPointerranfom_function缺少參數,並且返回類型不同)的簽名,則會出現錯誤。


另一個缺陷,即不被錯誤所示:的FuncPointer返回類型不匹配IOThreadPool::Task(空隙VS無效*)接受參數的返回類型。


解決方法:聲明instad

void* ranfom_function(void*) 

void* (*FuncPointer)(void*) 
+0

你是男人。就是這樣。感謝您向我解釋......您也爲我闡釋了這個概念的新亮點。我現在明白爲什麼它不起作用。祝賀你! – user0000001