//filename.cpp
#include <iostream>
#include <stdlib.h>
#include <windows.h>using namespace std;
class tro{
  public:
    void Watch(void);
    DWORD __stdcall WINAPI ThreadFunc(LPVOID);
};void tro::Watch()
{
    DWORD dwThreadId;
    CreateThread(NULL, 0, this->ThreadFunc, (LPVOID)0, 0, &dwThreadId );//就是这行报错
    return;
}DWORD __stdcall WINAPI ThreadFunc(LPVOID)
{
    return 0;
} int main(int argc, char *argv[]){ return 0; }//fileEnd
我用GCC编译时得到这个错误:
argument of type `DWORD (tro::)(void*)' does not match ` DWORD (*)(void*)' 
请问这是什么原因呀!如何解决?

解决方案 »

  1.   

    DWORD dwThreadId
    设为全局变量再试试
      

  2.   

    CreateThread(NULL, 0, this->ThreadFunc, (LPVOID)0, 0, &dwThreadId );this->ThreadFunc?? 
    有这样引用一个函数的吗? 这里不是函数调用,而是取函数的指针.CreateThread 也不能将一个成员函数指针传入. 你可以定义一个静态函数来解决:class tro{
      public:
        void Watch(void);
        static DWORD __stdcall WINAPI ThreadFunc(LPVOID lp)
        {  return ((tro*)lp)->Run();  
         }
      private:
         virtual DWORD Run();};void tro::Watch()
    {
        DWORD dwThreadId;
        CreateThread(NULL, 0, ThreadFunc, (LPVOID)this, 0, &dwThreadId ); // 就这行不报错
        return;
    }