有人可以帮助解决这个问题:
我在班级中有一个功能
class A
{
void fcn1(double *p, double *hx, int m, int n, void *adata);
void fcn2();
}
在fcn2里面我试图使用指向fcn1的指针如下:
A::fcn2()
{
void (*pfcn1)(double*, double*, int, int, void*) = fcn1;
}
我收到了一个错误:
错误C3867:'A :: fcn':函数调用缺少参数列表;使用'& A :: fcn'创建指向成员的指针
有人可以提供帮助。
由于
答案 0 :(得分:1)
更改为:
void (A::*pfcn1)(double*, double*, int, int, void*) = &A::fcn1;
考虑使用typedef
来提高可读性:
class A
{
...
typedef void (A::*fcn1_ptr)(double*, double*, int, int, void*);
};
void A::fcn2()
{
fcn1_ptr pfcn1 = &A::fcn1;
}
答案 1 :(得分:1)
fcn1()
不是普通函数,而是成员函数。你不能使用普通的函数指针来存储指向它的指针,因为这没有提供足够的信息:调用函数时应该this
设置什么?
您需要使用成员函数指针:
void (A::*pfcn1)(double*, double*, int, int, void*) = &A::fcn1;
如果您有a
类型的对象A
,稍后可以使用以下方法调用它:
(a.*pfcn1)(&somedouble, &somedouble, 42, 69, NULL);
如果指针pa
指向A
类型的对象,则稍后可以使用以下方法调用它:
(pa->*pfcn1)(&somedouble, &somedouble, 42, 69, NULL);