返回信息流☆─────────────────────────────────────☆
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
这是一条镜像帖。来源:北邮人论坛 / linux / #35939同步于 2008/2/6
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Linux机器人发帖
[合集] [求助]C++中使用pthread.h
fbsd
2008/2/6镜像同步0 回复
订阅后,新回复会通过你的通知中心匿名送达。
0 条回复
暂无回复 · 你可以订阅本帖等待新回复。