1

重複の可能性:
メンバー関数へのポインターを通常のポインターにキャストする

いくつかのコードがあります

class TT {
public:
  void set();
  void par1(int, int);
  void par2(double, double);
};

typedef void(*Ptr1)(TT &, int, int);

typedef void(*Ptr2)(TT &, double, double);

void hello(Ptr1, Ptr2){...}

void TT::set()
{
  hello(&TT::par1, &TT::par2);
}

エラーは次のように表示されます。

error C2664: 'hello' : cannot convert parameter 1 from 'void (__thiscall TT::* )(int,int)' to 'Ptr1'

この問題を解決する方法を教えてください。

4

1 に答える 1

3

あなたはこれをしたいです

typedef void(TT::*Ptr1)(int, int);
typedef void(TT::*Ptr2)(double, double);

thisまた、オブジェクトの関数を呼び出すには this ポインターが必要なので、ポインターを受け取るように hello 関数を修正します。

void hello(TT* obj,Ptr1 x, Ptr2 y){
    (obj->*x)(1,2);
}

メンバー関数ポインターの詳細については、この投稿を確認してください。

于 2012-11-27T02:20:29.443 に答える