函数指针问题

zhdx1981 2009-03-12 11:29:34

void * FunctionA()
{
return NULL;
}

int _tmain(int argc, _TCHAR* argv[])
{
void * pPtr;
void (*pFunc)(int);

pPtr = FunctionA();

pFunc = pPtr;//编译时这一行报错误:error C2440: “=” : 无法从“void *”转换为“void (__cdecl *)(int)”
//从“void*”到指向非“void”的指针的转换要求显式类型转换

return 0;
}

请问各位高人,该如何解决?
...全文
56 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复

void * FunctionA()
{
return NULL;
}

int _tmain(int argc, _TCHAR* argv[])
{
void * pPtr;
void (*pFunc)(int);

pPtr = FunctionA();

pFunc = pPtr;//编译时这一行报错误:error C2440: “=” : 无法从“void *”转换为“void (__cdecl *)(int)”
//从“void*”到指向非“void”的指针的转换要求显式类型转换
//pFunc 是有型参的,而pPtr函数类型跟他根本不一样,肯定不行。
return 0;
}
zhdx1981 2009-03-12
  • 打赏
  • 举报
回复
谢谢各位了
chin_chen 2009-03-12
  • 打赏
  • 举报
回复
#include <iostream>
using namespace std;
void * FunctionA()
{
cout<<"success!";
return 0;
}

int main()
{
void * pPtr;
void *(*pFunc)();

pPtr = FunctionA; //这里可以把函数指针传递个void*;

pFunc = static_cast<void*(*)(void)>(pPtr);//然后将指针还原成函数指针,就行了。
pFunc();
system("pause");
return 0;
}
neeestth 2009-03-12
  • 打赏
  • 举报
回复
[Quote=引用楼主 zhdx1981 的帖子:]
C/C++ codevoid*FunctionA()
{returnNULL;
}int_tmain(intargc, _TCHAR*argv[])
{void*pPtr;void(*pFunc)(int);

pPtr=FunctionA();

pFunc=pPtr;//编译时这一行报错误:error C2440: “=” : 无法从“void *”转换为“void (__cdecl *)(int)”//从“void*”到指向非“void”的指针的转换要求显式类型转换return0;
}
请问各位高人,该如何解决?
[/Quote]
void (*pFunc)(int); 中pFunc是指向函数的指针。
但是函数指针只能通过同类型的函数或函数指针或0值常量表达式进行初始化和赋值,
所以pFunc=pPtr;就错了,不是同一种类型哈、
npuhuxl 2009-03-12
  • 打赏
  • 举报
回复
pPtr是个void *指针

int _tmain(int argc, _TCHAR* argv[]) {
void * pPtr;
void (*pFunc)();
pPtr = FunctionA();
pFunc = FunctionA;
return 0;
}

chin_chen 2009-03-12
  • 打赏
  • 举报
回复
C++里面不允许把void*赋值给非void*的指针变量的。

64,636

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧