C++ C++;CreateThread()奇怪的错误

C++ C++;CreateThread()奇怪的错误,c++,windows,createthread,C++,Windows,Createthread,我尝试在我的应用程序中使用CreateThread()函数,但我得到了一个奇怪的错误,确切地说: error: invalid conversion from 'DWORD (__ attribute__((__ stdcall__)) *)() {aka long unsigned int (__ attribute__((__ stdcall__)) *)()}' to 'LPTHREAD_START_ROUTINE {aka long unsigned int (__ attribute_

我尝试在我的应用程序中使用CreateThread()函数,但我得到了一个奇怪的错误,确切地说:

error: invalid conversion from 'DWORD (__ attribute__((__ stdcall__)) *)() {aka long unsigned int (__ attribute__((__ stdcall__)) *)()}' to 'LPTHREAD_START_ROUTINE {aka long unsigned int (__ attribute__((__ stdcall__)) *)(void*)}' [-fpermissive]

第二行表示行

WINBASEAPI HANDLE WINAPI CreateThread(LPSECURITY_ATTRIBUTES,DWORD,LPTHREAD_START_ROUTINE,PVOID,DWORD,PDWORD);
在winbase.h中,我不明白发生了什么,在示例中是一样的,但没有错误。我做错了什么

代码:

#包括
#包括
使用名称空间std;
int a()
{

好吧,这是我的错,行得通

#include <iostream>
#include <windows.h>

using namespace std;

DWORD WINAPI a(LPVOID lpParameter)
{
   cout << "work";
   return 0;
}
int main(int argc, char **argv)
{
    CreateThread(NULL,0,a,NULL,0,NULL);
    return 0;
}
#包括
#包括
使用名称空间std;
DWORD WINAPI a(LPVOID lpParameter)
{

很好,您实际上是如何调用
CreateThread()
的?错误消息准确地说明了问题所在。您传递了错误类型的函数指针。错误消息同时说明了您传递的内容和应该传递的内容。必须正确定义线程函数。请参阅。
#include <iostream>
#include <windows.h>

using namespace std;

int a()
{
   cout << "work";
   return 0;
}
int main(int argc, char **argv)
{
    CreateThread(NULL,0,a,NULL,0,NULL);
    return 0;
}
#include <iostream>
#include <windows.h>

using namespace std;

DWORD WINAPI a(LPVOID lpParameter)
{
   cout << "work";
   return 0;
}
int main(int argc, char **argv)
{
    CreateThread(NULL,0,a,NULL,0,NULL);
    return 0;
}