0

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

我在课堂上有一个功能

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

这将是一种帮助的人。

谢谢

4

2 回答 2

1

改成:

void (A::*pfcn1)(double*, double*, int, int, void*) = &A::fcn1;

考虑使用 atypedef以提高可读性:

class A
{
   ...
   typedef void (A::*fcn1_ptr)(double*, double*, int, int, void*);
};

void A::fcn2()
{
    fcn1_ptr pfcn1 = &A::fcn1;
}
于 2012-09-20T14:11:27.917 回答
1

fcn1()不是普通函数,而是成员函数。您不能使用普通的函数指针来存储指向它的指针,因为这不能提供足够的信息:this调用函数时应该设置什么?

您需要改用成员函数指针:

void (A::*pfcn1)(double*, double*, int, int, void*) = &A::fcn1;

如果你有一个atype的对象A,你可以稍后使用:

(a.*pfcn1)(&somedouble, &somedouble, 42, 69, NULL);

如果你有一个指向pa类型对象的指针A,你可以稍后调用它:

(pa->*pfcn1)(&somedouble, &somedouble, 42, 69, NULL);
于 2012-09-20T14:11:52.207 回答