invalid conversion from 'void* (*)()' to 'void* (*)(void*)'
void *thread1()
if((temp = pthread_create(&thread[], NULL, thread1, NULL)) != )
提示:invalid conversion from 'void* (*)()' to 'void* (*)(void*)'
=============
改成: void *thread1(void *) void* (*)(void*): (*)表示这里需要一个函数指针, (void*)表示参数类型需要为void*
参考:
http://groups.google.com/group/comp.programming.threads/browse_thread/thread/8fddb216a36daa87/b03dda5b143e8260?#b03dda5b143e8260
http://www.uplook.cn/index-Index-show-view3094.html?treeid=624 =================
void main_thread ( void *ptr )
{
char *message1 = "Thread 1";
char *message2 = "Thread 2";
pthread_t thread3, thread4;
int iret3, iret4; iret3 = pthread_create(&thread3, NULL, (void *)&print_message_function, (void *) message1);
iret4 = pthread_create(&thread4, NULL, (void *)&print_message_function, (void *) message2); } void print_message_function( void *ptr )
{
char *message;
message = (char *) ptr;
printf("%s \n", message);
} 以上这段代码在用g++编译是会有如下错误:
invalid conversion from `void*' to `void*(*)(void*) 我们注意在Posix定义建立线程函数的原型: extern int pthread_create (pthread_t *__restrict __threadp,
__const pthread_attr_t *__restrict __attr,
void *(*__start_routine) (void *),
void *__restrict __arg) __THROW;
这个call中的第三个参数是载入一个函数,这个函数有一个参数可以传入,返回一个 通用指针。 我们再来看看原来函数中是怎样调用这一原型的,基本上就是类似一下的调用方式:
(void *)&main_thread
这个表达式的含义:取一个指向函数main_thread的指针,然后将其转换为一个通用指针。 这就是说显然上述两个事情并非同一个事情,故而正确的调用方式是 iret3 = pthread_create(&thread3, NULL, print_message_function, (void *) message1);//函数处加不加取地址符&无所谓,关键是第四个参数,以及函数的调用方式要写 正确的。
处理函数的定义如下:
void* print_message_function( void *ptr ) 值得注意的是在gcc编译时不会出错,但是用g++就会有问题,究其原因就是C语言编译器允许隐含性的将一个通用指针转换为任意类型的指针,而C++不允许。
转载自:http://blog.sina.com.cn/s/blog_698f90230100xxfn.html
invalid conversion from 'void* (*)()' to 'void* (*)(void*)'的更多相关文章
- C++(1):error: invalid conversion from ‘void (*)()’ to ‘void (*)(int)
void signaldemo_test(void) { struct itimerval tv, otv; signal(SIGALRM, sigFunc); //how long to run t ...
- void类型及void指针
1.概述 许多初学者对C/C 语言中的void及void指针类型不甚理解,因此在使用上出现了一些错误.本文将对void关键字的深刻含义进行解说,并 详述void及void指针类型的使用方法与技巧. 2 ...
- C语言之void类型及void指针 分类: C/C++ 2015-07-13 11:24 8人阅读 评论(0) 收藏
原文网址:http://www.cnblogs.com/pengyingh/articles/2407267.html 1.概述 许多初学者对C/C 语言中的void及void指针类型不甚理解,因此在 ...
- void (*f(int, void (*)(int)))(int) 函数解析 转
今天与几个同学看到了一个函数指针定义: void (*f(int, void (*)(int)))(int) 以前在C trap pit fails里面见过,但是文章里面介绍的很详细,但是往往使初学者 ...
- void *memmove( void* dest, const void* src, size_t count );数据拷贝,不需要CPU帮助
分享到 腾讯微博 QQ空间 新浪微博 人人网 朋友网 memmove 编辑词条 编辑词条 --> memmove用于从src拷贝count个字符到dest,如果目标区域和源区域有重叠的话,m ...
- void (*f(int, void (*)(int)))(int) 函数解析
函数指针 今天与几个同学看到了一个函数指针定义: void (*f(int, void (*)(int)))(int) 以前在C trap pit fails里面见过,但是文章里面介绍的很详细,但是往 ...
- void (*isr_handle_array[50])(void);求解这个申明怎么理解 啊??
这是函数指针数组.一层一层向里面剥就好啦. 是一个指向 返回值为void 参数也是void的指针数组.先看里面[50]知道是个数组,再向外看是一个函数指针,合起来就是函数指针数组.我写个源码,你就明白 ...
- void类型和void* 的用法
C语言中的void 和 void * 总结 1.void的作用 c语言中,void为“不确定类型”,不可以用void来声明变量.如:void a = 10:如果出现这样语句编译器会报错:variab ...
- void类型及void指针(转载)
转载 https://www.cnblogs.com/pengyingh/articles/2407267.html 2.void的含义 void的字面意思是“无类型”,void *则为“无类型指针” ...
随机推荐
- setting.xml配置详解
http://blog.csdn.net/uohzoaix/article/details/7035302 http://www.micmiu.com/software/build/maven-set ...
- webview使用遇到 It is possible that this object was over-released, or is in the process of deallocation错误的解决办法
使用wekwebview时,push后,再pop返回,报错了: Cannot form weak reference to instance (xxxx) of class xxxx. It is p ...
- C++知识整理(进制)
++输出二进制.十进制.八进制和十六进制总结 分类: C++ 2013-01-14 02:26 592人阅读 评论(0) 收藏 举报 在C++中,默认状态下,数据按十进制输入输出.如果要求按八进制或十 ...
- HTML:减少页面加载时间的方法
1. 重复的HTTP请求数量应尽量减少 (1)减少调用其他页面.文件的数量. (2)在使用css格式时,常会采用background载入图形文件,而每个background的图像都会产生1次HTTP ...
- CentOS6.6 32位 Minimal版本纯编译安装Nginx Mysql PHP Memcached
声明:部分编译指令在博客编辑器里好像被处理了,如双横线变成单横线了等等,于是在本地生成了一个pdf版本,在下面地址可以下载. LNMP+Memcached CentOS是红帽发行的免费的稳定Linux ...
- Android学习系列(19)--App离线下载
宜未雨而绸缪,毋临渴而掘井.----朱用纯<治家格言> 离线下载,在有网络的情况下下载服务器数据,以便无网络时也能阅读,就是离线阅读. 离线下载的功能点如下: ...
- 记一次400错误引发的血案(URL中特殊符号的转义/400 bad request错误)
django+nginx+uwsgi部署的站点访问某个URL时发生了400 bad request的错误,而使用django自带的开发版的web server时没有遇到此问题.初步判断是nginx或u ...
- iOS10:CallKit的简单应用
CallKit 这个开发框架,能够让语音或视讯电话的开发者将 UI 界面整合在 iPhone 原生的电话 App 中.将允许开发者将通讯 App 的功能内建在电话 App 的“常用联络资讯”,以及“通 ...
- 【转】一个对 Dijkstra 的采访视频
一个对 Dijkstra 的采访视频 (也可以访问 YouTube 或者从源地址下载 MPEG1,300M) 之前在微博上推荐了一个对 Dijkstra 的采访视频,看了两遍之后觉得实在很好,所以再正 ...
- Android学习之Android 5.0分享动画实现微信点击全屏效果
Android5.0过渡动画,请看 http://blog.csdn.net/qq_16131393/article/details/51112772 今天用分享动画实现微信点击全屏效果 本文源代码下 ...