1

コールバックを関数ポインタに転送したいと思います。そこで、静的 (int*) m_pointer1 とメソッド void RegisterCallback1( (int*)fct) を宣言します。

class1.h:

public:
   int RegisterCallback1( int (*fct) );
private:
   static int (*m_Callback1);

class1.cpp:

int class1::RegisterCallback1( int (*fct) )
{
    m_Callback1= fct;
}

次に、コールバックを関数ポインターに転送します。

void class1::Callback1()
{
   (*m_Callback1)();
}

しかし、コンパイラ エラーが表示されます。「Expression must have (pointer-to)- function type チュートリアルに従い、関数ポインターについて読んだところ、問題なくこのように実行されているようです。理由はありますか?

編集:だから、私は (int*)(void)m_Callback1 を宣言します -Visual Studio はそこに void を必要とします...-次に、引数を指定して registerCallback 関数を呼び出すにはどうすればよいですか?

class1.RegisterCallBack1(  ??? - class2::callback -??? );
4

3 に答える 3

7

static int (*m_Callback1)関数ポインタをデクレートするのではなく、intへのポインタだけです。パラメータリストを忘れてしまいました。あなたが意味した:

static int (*m_Callback1)();

int RegisterCallback1( int (*fct)() );
于 2012-04-24T19:19:08.203 に答える
6

関数ポインタを宣言していません。通常のデータポインタを宣言しています。宣言の最後に()がありません。

于 2012-04-24T19:19:01.013 に答える
1

コールバック関数のシグネチャに typedef を使用することで、Oli と Dave によって指摘された欠落している () エラーを制限することができますtypedef int (*)() CallBack;。そのような関数を使用するコード。

于 2012-04-24T19:28:05.393 に答える