2011-07-20 55 views
0

任何評論意識到下面的編譯錯誤。 雖然我的問題類似於其他線程:pthread function from a class,但我仍然無法解決我的問題。我仍然不是那種有指針的familliar,而是C++編寫的線程編程。「無效轉換」與pthread_create問題

錯誤

../src/Main.cpp: In function ‘int main(int, char**)’: 
../src/Main.cpp:22: error: invalid conversion from ‘unsigned int* (*)(void*)’ to ‘void* (*)(void*)’ 
../src/Main.cpp:22: error: initializing argument 3 of ‘int pthread_create(pthread_t*, const pthread_attr_t*, void* (*)(void*), void*)’ 
make: *** [src/Main.o] Error 1 

Main.cpp的

#include <process.h> 
#include "ThreadInstance.hpp" 
#include <iostream> 
#include <fstream> 
using namespace std; 

int main(int argc, char** argv) 
{ 
    pthread_mutex_t mutex; 
    int ht1; 
    pthread_t threadId1; 
    pthread_attr_t attr1; 

    pthread_mutex_init(&mutex, NULL); 
    pthread_attr_init(&attr1); 
    pthread_attr_setdetachstate(&attr1, PTHREAD_CREATE_DETACHED); 

    ht1 = pthread_create(&threadId1, 
      &attr1, 
      &ThreadInstance::ThreadEntryPoint, 
      //(void *)readThread); 
      NULL); 

    unsigned long rc = 0; 
    rc = pthread_join(ht1, NULL); 

    return 0; 
} 

ThreadInstance.hpp

#ifndef _SCENE_CLASSIFY_THREAD_H 
#define _SCENE_CLASSIFY_THREAD_H 

#ifndef STDCALL 
#define STDCALL __attribute__((stdcall)) 
#endif 

using namespace std; 

class ThreadInstance 
{ 
    public: 
     ThreadInstance(); 
     ThreadInstance(int camNum); 

     void startUp(); 

     static unsigned STDCALL* ThreadEntryPoint(void* pThis) 
     { 
      //static unsigned __stdcall ThreadEntryPoint(void* pThis) { 
      ThreadInstance *ptr = (ThreadInstance*) pThis; 
      ptr->startUp(); 
      //return 1; // Returns error "invalid conversion from ‘int’ to ‘unsigned int*’" when the function is declared as pointer. 
          // Since returning either 1 or 0, 
          // compile error still occurs. 
          // So this return value should not be the cause. 

      return 0; 
     } 
     ~ThreadInstance(); 
}; 
#endif 

注意:只有在必要部分顯示

+0

如果你不知道什麼是錯的,你怎麼知道什麼是「必要的」? –

回答

1

ThreadEntryPoint必須retur n void*

該錯誤指示預期的類型,這是您需要使用的函數指針類型。

+0

謝謝。將返回類型改爲void *可以解決這個問題(不管結果是否是我想要的還是不知道的,儘管我現在正在修改某個人的代碼)。 – IsaacS

+0

@ user577001:這不是一種解決方法;這是需要的簽名。 –

+0

哦,我明白了。這是我想知道的。謝謝@Tomalak Geret'kal – IsaacS

0

啓動函數返回void*並且需要void*。您的回報unsigned int*

更改方法以返回指向void的指針。