如何在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 个参数的函数
为什么会出这问题啊.. 展开
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 个参数的函数
为什么会出这问题啊.. 展开
3个回答
展开全部
并不存在指向对象成员的函数指针。
指向对象成员的指针称为成员指针,和函数指针并不等价,也就是不能当作函数指针使用。
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;
}
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;
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
int main()
{ void (Test::*p)(int x);
Test test;
p=&test.show; //必须取地址
(test.*p)(5); // 调用必须关联test
getchar();
return 0;
}
{ void (Test::*p)(int x);
Test test;
p=&test.show; //必须取地址
(test.*p)(5); // 调用必须关联test
getchar();
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询