成员函数的函数指针

时间:2012-09-20 14:08:57

标签: c++ visual-studio

有人可以帮助解决这个问题:

我在班级中有一个功能

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'创建指向成员的指针

有人可以提供帮助。

由于

2 个答案:

答案 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);