函数指针的问题

morphis 2003-10-09 11:00:14
为什么编译出错了?
line 19: Error: Taking address of the bound function A::func().

代码如下:
#include <iostream>
class A
{
public:
void func();
void (*pfunc)();
};


void A::func()
{
return;
}

int main()
{

A a;
a.pfunc = a.func;
return 1;
}
...全文
41 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
teddyzhai 2003-10-11
  • 打赏
  • 举报
回复
大哥,我想知道答案拉,帮帮忙!!
Andy84920 2003-10-11
  • 打赏
  • 举报
回复
TO:panzhaoping(潘赵平)

cout<<a.func;看看是一个1,不是地址

这个cout可以通过编译吗?为什么我的G++出错??
Andy84920 2003-10-11
  • 打赏
  • 举报
回复
建议看看C++ PRIMER中的关于类成员函数指针与数据成员指针(包括静态)
的表示与用法一节.有帮助的.

lh198020002000 2003-10-09
  • 打赏
  • 举报
回复
成员函数的定义最好放在类定义时
Hot_Forever 2003-10-09
  • 打赏
  • 举报
回复
#include <iostream>
using namespace std;
class A
{
public:
void func();
void (A::*pfunc)();
};


void A::func()
{
return;
}

int main()
{

A a;
a.pfunc = a.func;
return 1;
}
lemon520 2003-10-09
  • 打赏
  • 举报
回复
楼主定义的成员void (*pfunc)(); 是一个可以指向普通函数的指针,而void func();是类A的成员。普通的函数指针是不可以指向成员函数的。
指向成员函数的指针需要加上类域来限定!如把void (*pfunc)(); 改成void (A::*pfunc)();
就ok了!
xueweizhong 2003-10-09
  • 打赏
  • 举报
回复
#include <iostream>
class A
{
public:
void func();
void (A::*pfunc)();
};


void A::func()
{
return;
}

int main()
{

A a;
a.pfunc = &A::func;
return 1;
}
daizh 2003-10-09
  • 打赏
  • 举报
回复
首先你的func()函数中不应该用return,因为你定义的是void型函数.
aflyinghorse 2003-10-09
  • 打赏
  • 举报
回复
#include <iostream>
using namespace std;
class A
{
public:
void func();
void (A::*pfunc)();
};


void A::func()
{
cout << "func";
return;
}

int main()
{

A a;
a.pfunc = &A::func;
(a.*(a.pfunc))();
getchar();
return 1;
}
马大哈昆 2003-10-09
  • 打赏
  • 举报
回复
上面的代码中的 (a.*(a.pfunc))(); 具体是什么意思?

a.pfunc是一个函数指针,*(a.pfunc)就是成员函数了,通过对象a调用.
teddyzhai 2003-10-09
  • 打赏
  • 举报
回复
最后的return l,是什么意思啊?
我怎么连这里都没有看懂啊!!!
morphis 2003-10-09
  • 打赏
  • 举报
回复
up
morphis 2003-10-09
  • 打赏
  • 举报
回复
谢谢啦。有谁知道我最后的问题是为什么啊?
leyt 2003-10-09
  • 打赏
  • 举报
回复
已经有这么多人回答了,我做下总结:

错误的有:daizh() 、Hot_Forever(用钱砸死我吧)

正确的有:aflyinghorse()、xueweizhong(薛卫忠) 、lemon520(大母猪)
morphis 2003-10-09
  • 打赏
  • 举报
回复
#include <iostream>
using namespace std;
class A
{
public:
void func();
void (A::*pfunc)();
};


void A::func()
{
cout << "func";
return;
}

int main()
{

A a;
a.pfunc = &A::func;
(a.*(a.pfunc))();
getchar();
return 1;
}

上面的代码中的 (a.*(a.pfunc))(); 具体是什么意思?
谢谢了

还有照panzhaoping(潘赵平)说的,cout << &(A::func)出来也是1,为什么?
panzhaoping 2003-10-09
  • 打赏
  • 举报
回复
a.pfunc = a.func;
这就有问题,why?
因为你要知道,a.pfunc 是一个32位的指针,而不是一个函数
所以右边有问题,你用
cout<<a.func;看看是一个1,不是地址
williamVII 2003-10-09
  • 打赏
  • 举报
回复
TO:楼主
一楼的代码已经很清楚了.
注意域.

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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