当前位置: 技术问答>linux和unix
ANSI C++ forbids implicit conversion from `void *' in argument passing
来源: 互联网 发布时间:2015-11-04
本文导语: 用arm-linux-g++ server.c -ljrtp -lpthread -o server编译程序,因为用到c++写的jrtp库,所以必须用g++编译,可总是出现 ANSI C++ forbids implicit conversion from `void *' in argument passing 的错误。 出错函数: pthread_create(&id,NULL,(vo...
用arm-linux-g++ server.c -ljrtp -lpthread -o server编译程序,因为用到c++写的jrtp库,所以必须用g++编译,可总是出现
ANSI C++ forbids implicit conversion from `void *' in argument passing
的错误。
出错函数:
pthread_create(&id,NULL,(void*)thread,NULL);
这个函数用gcc编译没有问题。
请高手指点。
ANSI C++ forbids implicit conversion from `void *' in argument passing
的错误。
出错函数:
pthread_create(&id,NULL,(void*)thread,NULL);
这个函数用gcc编译没有问题。
请高手指点。
|
这样写
pthread_create(&id, NULL, (void*(*)(void*))thread, NULL);
而且根本不该用dynamic_cast,要用也是static_cast(又不是包含虚函数的类的指针/引用,怎么能用dynamic_cast呢?楼主的C++应该加强加强了)
pthread_create(&id, NULL, (void*(*)(void*))thread, NULL);
而且根本不该用dynamic_cast,要用也是static_cast(又不是包含虚函数的类的指针/引用,怎么能用dynamic_cast呢?楼主的C++应该加强加强了)
|
void *(*start_routine)(void*)就是需要的函数原型。
void* thread(void*)
{
...
}
void* thread(void*)
{
...
}
|
pthread_create(&id,NULL,(void*)thread,NULL);
(void*)thread错误。C++禁止将void*隐式转换为其它类型,就象你这里,要将((void*)thread)在传递函数参数时隐式转换为 void *(*start_routine)(void*)函数指针类型,所以是错误的。
去掉(void*)强制转换。直接传递thread试试。如果thread原型正确,不需要转换。
(void*)thread错误。C++禁止将void*隐式转换为其它类型,就象你这里,要将((void*)thread)在传递函数参数时隐式转换为 void *(*start_routine)(void*)函数指针类型,所以是错误的。
去掉(void*)强制转换。直接传递thread试试。如果thread原型正确,不需要转换。
|
ISO/IEC 14882不准这么干,但是ISO/IEC 9899:1999是允许的。C++强制所有的void*到其他类型的转换都要加上强制转换的操作符。
|
楼主,thread定义不对。
|
这里的情况连static_cast也不能用……必须用reinterpret_cast才行……
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。