如何在c++中声明指向对象的成员函数的函数指针?

#include"iostream"usingnamespacestd;classTest{public:voidshow(intx){cout<<"test:"<<x<... #include"iostream"
using namespace std;
class Test
{
public:
void show(int x){cout<<"test:"<<x<<endl;}
};
int main()
{
void (Test::*p)(int x);
Test test;
p=test.show; //12行
p(5); //13行
getchar(); //暂停
return 0;
}

main.cpp(12): error C3867: “Test::show”: 函数调用缺少参数列表;请使用“&Test::show”创建指向成员的指针
main.cpp(13): error C2064: 项不会计算为接受 1 个参数的函数

为什么会出这问题啊..
展开
 我来答
BlueWanderer
2015-11-09 · TA获得超过9209个赞
知道大有可为答主
回答量:5673
采纳率:83%
帮助的人:2020万
展开全部

并不存在指向对象成员的函数指针。


指向对象成员的指针称为成员指针,和函数指针并不等价,也就是不能当作函数指针使用。

struct A
{
 void foo()
 {

 }

 void goo()
 {

 }
};

void (A::*p)(); // p就是一个A类对象中没有参数返回void的成员函数的成员指针

int main()
{
 p = &A::foo; // 然后可以用这种写法对它赋值。
 p = &A::goo;

 int A::*q; // 数据成员同样可以有成员指针

 q = &A::x;
 q = &A::y;

 A a;

 (a.*p)(); // 成员指针的用法,必须和对象配套使用

 a.*q = 1;
}


对于必须使用函数指针的情况,可能需要获得静态成员函数的函数指针(静态成员函数是可以正常获得函数指针的)。并在调用时,把对象的地址作为参数传递。

匿名用户
2013-08-27
展开全部
#include"iostream"
using namespace std;
class Test
{
public:
void show(int x)
{
cout<<"test:"<<x<<endl;
}
};
int main()
{
//void (Test::*p)(int x); 哪能这样弄啊
Test test;
//p=test.show; 函数要接受参数啊,没有返回值啊
test.show(9);//这样就输出test:9了
getchar();
return 0;
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
fdxuwei
2015-07-04 · TA获得超过271个赞
知道小有建树答主
回答量:207
采纳率:0%
帮助的人:267万
展开全部
int main()
{ void (Test::*p)(int x);
Test test;
p=&test.show; //必须取地址
(test.*p)(5); // 调用必须关联test
getchar();
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式