C++ POSIX(C+;+;)参数类型不匹配

C++ POSIX(C+;+;)参数类型不匹配,c++,multithreading,posix,C++,Multithreading,Posix,我有一个名为race的函数,参数为Fleet*object: void* race(Fleet* fleet){ //some code here } 还有另一个posix线程参数: vector<Fleet*> allfleet; //value has been passed/stored, ignore pthread_create(&t[i],NULL,race,allfleet.at(i)); 我尝试了一切,转换

我有一个名为race的函数,参数为Fleet*object:

    void* race(Fleet* fleet){
        //some code here
    }
还有另一个posix线程参数:

    vector<Fleet*> allfleet; //value has been passed/stored, ignore 
    pthread_create(&t[i],NULL,race,allfleet.at(i));
我尝试了一切,转换,铸造,没有任何效果

注意:不存在其他错误,只是类型不匹配

编辑:


看来签名需要

   void* function (void*) 
但事实上,种族是不平等的

   void* fuction (Fleet*)
。您的函数与它不兼容。尝试:

void* race(void* data) {
    Fleet* fleet = (Fleet*)data;
    //some code here
};
如果您使用的是C++11,我建议使用而不是pthread调用。

。您的函数与它不兼容。尝试:

void* race(void* data) {
    Fleet* fleet = (Fleet*)data;
    //some code here
};


如果您使用的是C++11 I advice,而不是pthread调用。

这就是您正在运行的示例吗?由于您所获得的错误,似乎不匹配您正在显示的代码(记住,C++是区分大小写的语言!)。尝试用正确的原型定义<代码> RACU< <代码>。请复制并粘贴错误消息。没有编译器会使用“param”这个词。看看
pthread\u create
签名,写出每个参数的类型,然后写出要传递和比较的参数类型。“看起来签名需要void*函数(void*),而race是void*函数(Fleet*)”编译器正试图告诉你这一点。你在用什么编译器?错误消息不是世界上最好的。这就是您正在运行的示例吗?由于您所获得的错误,似乎不匹配您正在显示的代码(记住,C++是区分大小写的语言!)。尝试用正确的原型定义<代码> RACU< <代码>。请复制并粘贴错误消息。没有编译器会使用“param”这个词。看看
pthread\u create
签名,写出每个参数的类型,然后写出要传递和比较的参数类型。“看起来签名需要void*函数(void*),而race是void*函数(Fleet*)”编译器正试图告诉你这一点。你在用什么编译器?错误消息不是世界上最好的。这是正确的。OP应该已经阅读了文档(以及错误消息)!谢谢,这很有帮助。我对多线程有点陌生,所以传递指针类型让我感到困惑。起初我认为强制转换/转换会有所帮助。如果您使用C++11,我建议使用std::thread而不是pthread调用。但是,为了学习线程是如何工作的,我认为使用PtLoIP调用会更好——在POSIX平台上,C++ >代码> STD::线程几乎可以肯定地使用pTule..HyrdLele实现,这就是STD::线程是更好的IMO:它是平台无关的原因。作为奖励,它可以为您处理参数打包/解包。@freakish但如果您学习pthreads,
std::thread
和MS Windows线程一样容易。另外,让
std::thread
为您完成所有工作意味着您不了解线程实际上如何访问从父线程传递的数据。当然,你可以使用 STD::线程的可移植C++代码,但是当你试图学习如何成为一个可在多个平台上编写C++代码的便携式程序员时,这又如何呢?OP应该已经阅读了文档(以及错误消息)!谢谢,这很有帮助。我对多线程有点陌生,所以传递指针类型让我感到困惑。起初我认为强制转换/转换会有所帮助。如果您使用C++11,我建议使用std::thread而不是pthread调用。但是,为了学习线程是如何工作的,我认为使用PtLoIP调用会更好——在POSIX平台上,C++ >代码> STD::线程几乎可以肯定地使用pTule..HyrdLele实现,这就是STD::线程是更好的IMO:它是平台无关的原因。作为奖励,它可以为您处理参数打包/解包。@freakish但如果您学习pthreads,
std::thread
和MS Windows线程一样容易。另外,让
std::thread
为您完成所有工作意味着您不了解线程实际上如何访问从父线程传递的数据。当然,你可以使用 STD::线程的可移植C++代码,但是当你试图学习如何成为一个可在多个平台上编写C++代码的便携式程序员时,你会怎么做?