[英]Array of function pointers to member functions
I have the following code 我有以下代码
#include<iostream>
using namespace std;
class operate
{
int x;
int y;
public:
operate(int _x, int _y):x(_x), y(_y)
{}
void add(const char* ch)
{
cout<<ch<<" "<<x+y;
}
void subtract(const char* ch)
{
cout<<ch<<" "<<x-y;
}
void multiply(const char* ch)
{
cout<<ch<<" "<<x*y;
}
};
int main()
{
void (operate::*fptr[3])(const char*);
operate obj(2,3);
fptr[0] = &(operate.add); //problem
fptr[1] = &(operate.multiply); //problem
fptr[2] = &(operate.subtract); //problem
(obj.*fptr[0])("adding");
(obj.*fptr[1])("multiplying");
(obj.*fptr[2])("subtracting");
}
It seems I am not assigning the member functions to function pointer array properly. 看来我没有正确地将成员函数分配给函数指针数组。 How can I solve this.
我该如何解决。 I'm using VS2010
我正在使用VS2010
The dot (member-of) operator is used for accessing members of an object. 点(成员)运算符用于访问对象的成员。 For classes and namespaces, you have to use the
::
operator. 对于类和名称空间,必须使用
::
运算符。 Also, don't parenthesize, since &
has lower precedence than ::
and it's more readable like 另外,请不要加上括号,因为
&
优先级比::
低,并且可读性更高,例如
fptr[0] = &operate::add;
This should do the job 这应该做的工作
void testFP()
{
typedef void (operate::*memFP)(const char*);
memFP fptr[3];
fptr[0] = &operate::add;
fptr[1] = &operate::multiply;
fptr[2] = &operate::subtract;
operate op(42, 42);
(op.*(fptr[0]))("adding");
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.