免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 929 | 回复: 5
打印 上一主题 下一主题

请教:关于函数匹配的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-01-19 18:19 |只看该作者 |倒序浏览
编了一段 linux Pthreads 多线程的代码
编译未能通过,报错如下:
In member function ' void PrimeNum::Fun(int,int)'
95: no matches converting function 'taska' to type 'void*(*)(*void)'
23: candidates are: void* PrimeNum::taska(void*)
97: no matches converting function 'taska' to type 'void*(*)(*void)'
23: candidates are: void* PrimeNum::taska(void*)

知道是类型不匹配,但不知道怎么改

源代码如下:
#include <iostream.h>
#include <math.h>
#include <pthread.h>
#include <time.h>
#include <sys/time.h>
#include <unistd.h>
#include <stdlib.h>

class PrimeNum
{
public:
  int N;
  int M;
  void * taska(void *);     //对taska 定义不对?
  void Fun(int, int);
};


void * PrimeNum::taska(void *q)
{
  int *t =(int *)q;

  int m1,m2,k,i;
  int sum1=0;
  int sum2=0;
  int n,m,L;

  L=*t;

  if (L == 1)
    {  
      n = N;
      m = M/2;

      bool prime;
      for(m1=n;m1<=m;m1=m1+1)
        {
          prime=true;
          k = (int)sqrt((double)m1);
          for(i=2;i <= k;i++)
            if(m1%i == 0)
              {
                prime = false;
                break;
              }
          if(prime)
            {
              cout << m1 << " ";
              sum1=sum1+1;
            }
        }
      cout << endl;
      cout << "sum1=" << sum1 << endl;
    }

  if (L == 2)
    {
      n = M/2+1;
      m = M;

      bool prime;
      for(m2=n;m2<=m;m2=m2+1)
        {
          prime=true;
          k = (int)sqrt((double)m2);
          for(i=2;i <= k;i++)
            if(m2%i == 0)
              {
                prime = false;
                break;
              }
          if(prime)
            {
              cout << m2 << " ";
              sum2=sum2+1;
            }
        }
      cout << endl;
      cout << "sum2=" << sum2 << endl;
    }
}

void PrimeNum::Fun(int N,int M)
{
  pthread_t ThreadA,ThreadB;

  int t;
  void * q=&t;
  
  t=1;
  pthread_create(&ThreadA,NULL,taska,q);      //95行 taska该如何调用?
  t=2;
  pthread_create(&ThreadB,NULL,taska,q);      //97行
  
  pthread_join(ThreadA,&q);
  pthread_join(ThreadB,&q);
}

main(int argc,char *argv[])
{
  struct timeval ts1,te1;
  float timeuse;
  pthread_t ThreadA,ThreadB;
  
  PrimeNum a;

  cout << "please input a number :" << endl << "N = " ;
  cin >> a.N;
  cout << "please input a number :" << endl << "M = " ;
  cin >> a.M;
  
  gettimeofday(&ts1,NULL);
  
  a.Fun(a.N,a.M);

  cout << endl;
  gettimeofday(&te1,NULL);

  timeuse = 1000000*(te1.tv_sec - ts1.tv_sec) + te1.tv_usec - ts1.tv_usec;
  timeuse /= 1000000;
  cout << "timeuse = " << timeuse << endl;

  return 0;
}


望各位大侠指教,谢谢

论坛徽章:
0
2 [报告]
发表于 2006-01-19 21:39 |只看该作者
急啊,各位大侠帮帮忙啊

论坛徽章:
0
3 [报告]
发表于 2006-01-20 08:47 |只看该作者
" pthread_create(&ThreadA,NULL,taska,q);      //95行 taska该如何调用?
  t=2;
  pthread_create(&ThreadB,NULL,taska,q);      //97行
"

&taska

论坛徽章:
0
4 [报告]
发表于 2006-01-20 10:01 |只看该作者
试过,还是不行

论坛徽章:
0
5 [报告]
发表于 2006-01-20 17:45 |只看该作者
static void * taska(void *);

论坛徽章:
0
6 [报告]
发表于 2006-01-20 21:36 |只看该作者
改成 “static void * taska(void *);” 后, N和M就不让用了:
invalid use of member 'PrimeNum::N' in static member function
invalid use of member 'PrimeNum::M' in static member function
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP