C++,C函数指针

//C版能运行,VC6.0

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define bool unsigned char
#define boolean bool
#define true 1
#define false 0
 
typedef int *(*sum)(int* a,int* b);
typedef int (*huiwen)(char *str);
int *sum_ab(void *pa,void *pb)
{
 int pab_sum=(*(int *)pa+ *(int *)pb);
 int *P_sum = &pab_sum;
 return P_sum;
}
int  wen_str(void *str)
{
 char *pstr=(char*)str;
 int n= strlen(pstr);
 int i,j=n-1;
 int vbool=false;
 if(n>=2) vbool=true;
 for (i=0;i<n/2;i++)
 {
  if(pstr[i]==pstr[j--])
  {
   vbool=true;
   continue ;
  }
  else
  {
   vbool =false ;
   break;
  }
 }
 return vbool;
}
void my_bool_callback(huiwen my_bool_fun,char *str)
{
 int vbool;
 vbool = (int)my_bool_fun(str);
 if(vbool==true)
  printf("true\n");
 else
  printf("false\n");
}
void my_add_callback(sum my_add_func, void *m, void *n)
{
 int *pIntResults = NULL;
 pIntResults = (int *)my_add_func(m, n);
 printf("result = %d\n",*pIntResults);
}
void main()
{
 int x=3,y=4;
 int s=wen_str("fasfd");
 huiwen my_bool_fun;
 my_bool_fun=wen_str;
 printf("%d\n",my_bool_fun("fasaf"));//
 my_add_callback(sum_ab, &x, &y);
 my_bool_callback(wen_str,"a");
}
 

//C++版不能运行,VS2008

#include <iostream>
using namespace std;
#include <string.h>

#define bool unsigned char
#define boolean bool
#define true 1
#define false 0
 
typedef int *(*sum)(int* a,int* b);
typedef int (*huiwen)(char *str);
int *sum_ab(void *pa,void *pb)
{
 int pab_sum=(*(int *)pa+ *(int *)pb);
 int *P_sum = &pab_sum;
 return P_sum;
}
int  wen_str(void *str)
{
 char *pstr=(char*)str;
 int n= strlen(pstr);
 int i,j=n-1;
 int vbool=false;
 if(n>=2) vbool=true;
 for (i=0;i<n/2;i++)
 {
  if(pstr[i]==pstr[j--])
  {
   vbool=true;
   continue ;
  }
  else
  {
   vbool =false ;
   break;
  }
 }
 return vbool;
}
void my_bool_callback(huiwen my_bool_fun,char *str)
{
 int vbool;
 vbool = (int)my_bool_fun(str);
 if(vbool==true)
  cout<<"true\n";
 else
  cout<<"false\n";
}
void my_add_callback(sum my_add_func, void *m, void *n)
{
 int *pIntResults = NULL;
 pIntResults = (int *)my_add_func((int*)m, (int*)n);
 cout<<"result = "<<*pIntResults<<endl;
}
void main()
{
 int x=3,y=4;
 int s=wen_str("fasfd");
 huiwen my_bool_fun;
 my_bool_fun=wen_str;
 printf("%d\n",my_bool_fun("fasaf"));//
 my_add_callback(sum_ab, &x, &y);
 my_bool_callback(wen_str,"a");

}


错误提示:

1>e:\mycode\filter\filter\filter.cpp(81) : error C2440: “=”: 无法从“int (__cdecl *)(void *)”转换为“huiwen”
1>        该转换要求 reinterpret_cast、C 样式转换或函数类型转换
1>e:\mycode\filter\filter\filter.cpp(83) : error C2664: “my_add_callback”: 不能将参数 1 从“int *(__cdecl *)(void *,void *)”转换为“sum”
1>        在匹配目标类型的范围内没有具有该名称的函数
1>e:\mycode\filter\filter\filter.cpp(84) : error C2664: “my_bool_callback”: 不能将参数 1 从“int (__cdecl *)(void *)”转换为“huiwen”
1>        在匹配目标类型的范围内没有具有该名称的函数

解决方法:?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

john_liqinghan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值