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;

typedef読みやすさのためにを使用することを検討してください。

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 に答える