BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / linux / #35939同步于 2008/2/6
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Linux机器人发帖

[合集] [求助]C++中使用pthread.h

fbsd
2008/2/6镜像同步0 回复
☆─────────────────────────────────────☆ Xer (Benogy) 于 (Tue Feb 5 19:28:14 2008) 提到: 把类A的一个函数传给pthread_create时提示函数指针转换出错: 30: 错误:实参类型为 ‘void* (B::)(void*)const’,与 ‘void* (*)(void*)’ 不匹配 google了一下,说是要在函数原型前加上extren "C",但是这样不是要在pthread.h里面加吗? 另一种方法是重新定义一个函数f,然后在f里面调用b.print()。但是因为print还要接收参数a,而a和b又不好放到一个结构体里面传给f,应该怎么办? 谢谢。 下面是实例: #include<pthread.h> #include<iostream> using std::cout; using std::endl; class A { public: A(){a=10;} int geta()const{return a;} private: int a; }; class B { public: void* print(void* tt)const{cout<<((A*)tt)->geta()<<endl;} }; int main() { A tt; B b; pthread_t t; pthread_create(&t,NULL,b.print,(void*)&tt); pthread_join(t,NULL); return 0; } ☆─────────────────────────────────────☆ billgaga (X_Matrix) 于 (Tue Feb 5 19:46:02 2008) 提到: 在C++中调用C库 需要加上extern "C" {...} 编译时函数名标识不一致 extern "C" { #include "pthread.h" } ☆─────────────────────────────────────☆ Xer (Benogy) 于 (Tue Feb 5 20:05:04 2008) 提到: 没用,还是一样的错。 【 在 billgaga (X_Matrix) 的大作中提到: 】 : 在C++中调用C库 需要加上extern "C" {...} : 编译时函数名标识不一致 : extern "C" : ................... ☆─────────────────────────────────────☆ billgaga (X_Matrix) 于 (Tue Feb 5 20:21:17 2008) 提到: b.print 前加(void*) 应该就行了 ☆─────────────────────────────────────☆ Xer (Benogy) 于 (Tue Feb 5 20:27:28 2008) 提到: 感谢你的热心,但是还是不行...... 【 在 billgaga (X_Matrix) 的大作中提到: 】 : b.print 前加(void*) 应该就行了 ☆─────────────────────────────────────☆ billgaga (X_Matrix) 于 (Tue Feb 5 20:36:03 2008) 提到: 刚才错了 是函数类型类型不对 没仔细想 还以为是变量呢 b.print 前加 (void*(*)(void*))这次肯定行了 ☆─────────────────────────────────────☆ Xer (Benogy) 于 (Tue Feb 5 20:43:51 2008) 提到: 还是不行,出错信息: 31: 错误:invalid use of member (did you forget the ‘&’ ?) 问一下,你是在你的电脑上运行通过吗? 【 在 billgaga (X_Matrix) 的大作中提到: 】 : 刚才错了 是函数类型类型不对 没仔细想 还以为是变量呢 : b.print 前加 (void*(*)(void*))这次肯定行了 ☆─────────────────────────────────────☆ billgaga (X_Matrix) 于 (Tue Feb 5 20:56:32 2008) 提到: 现在用的这机子 没运行环境 pthread_create 的第三个参数 C++中是要强类型转换 C中不用 刚才是代码的30行出错 现在是31行出错 如果你没加行的话 ☆─────────────────────────────────────☆ Xer (Benogy) 于 (Tue Feb 5 21:03:36 2008) 提到: 不好意思,可能顺手加了一空行~~~~~~不过还是那行出错,出错信息就是31行那样。 【 在 billgaga (X_Matrix) 的大作中提到: 】 : 现在用的这机子 没运行环境 : pthread_create 的第三个参数 C++中是要强类型转换 C中不用 : 刚才是代码的30行出错 : ................... ☆─────────────────────────────────────☆ billgaga (X_Matrix) 于 (Tue Feb 5 21:10:24 2008) 提到: 加上 & 没在C++中搞过pthread 等一会 在令一台机子上装完环境 运行一下试试 ☆─────────────────────────────────────☆ Xer (Benogy) 于 (Tue Feb 5 21:41:54 2008) 提到: 囧,难道你以为我看了错误信息改都没改就就直接贴给你看么?加了还是错~~~~~~ 【 在 billgaga (X_Matrix) 的大作中提到: 】 : 加上 & : 没在C++中搞过pthread : 等一会 在令一台机子上装完环境 运行一下试试 : ................... ☆─────────────────────────────────────☆ ki (谁) 于 (Tue Feb 5 21:54:17 2008) 提到: 不能为成员函数单开线程 ☆─────────────────────────────────────☆ caspar ([SL小分队]|★ANT☆) 于 (Tue Feb 5 21:56:13 2008) 提到: 查了下语法,你最初的写法是正确的。。。 【 在 Xer (Benogy) 的大作中提到: 】 : 囧,难道你以为我看了错误信息改都没改就就直接贴给你看么?加了还是错~~~~~~ ☆─────────────────────────────────────☆ ki (谁) 于 (Tue Feb 5 21:59:15 2008) 提到: 稍微解释一下吧 pthread_create的第三个参数只能使用静态成员,而类成员(非静态)参数实际上另外还有一个隐藏得this指针, ☆─────────────────────────────────────☆ billgaga (X_Matrix) 于 (Tue Feb 5 22:00:54 2008) 提到: 哦 是啊 忘了忘了 把成员函数编程静态的 加个static 【 在 ki 的大作中提到: 】 : 不能为成员函数单开线程 ☆─────────────────────────────────────☆ ki (谁) 于 (Tue Feb 5 22:03:21 2008) 提到: 顺带说一下,这种想法是多余的,你去看一下 pthread.h 就会发现里面有 #ifdef __cplusplus extern "C" { #endif 【 在 billgaga 的大作中提到: 】 : 在C++中调用C库 需要加上extern "C" {...} : 编译时函数名标识不一致 : extern "C" : ................... ☆─────────────────────────────────────☆ Xer (Benogy) 于 (Tue Feb 5 22:07:19 2008) 提到: 嗯,明白了,非常感谢。 【 在 ki (谁) 的大作中提到: 】 : 稍微解释一下吧 : pthread_create的第三个参数只能使用静态成员,而类成员(非静态)参数实际上另外还有一个隐藏得this指针, ☆─────────────────────────────────────☆ Xer (Benogy) 于 (Tue Feb 5 22:07:38 2008) 提到: 谢谢,加了static就行了。 【 在 billgaga (X_Matrix) 的大作中提到: 】 : 哦 是啊 忘了忘了 把成员函数编程静态的 加个static
订阅后,新回复会通过你的通知中心匿名送达。
0 条回复
暂无回复 · 你可以订阅本帖等待新回复。