0

次のような静的メンバー関数があります。

void whackamole_window::showmole(void *){
  if (mtime == 0) {
    Fl::remove_timeout(whackamole_window::showmole);
  }
  else {
    //...

    m(Point(randx*50+25,randy*50+25),randval),
    mb(Point(randx*50,randy*50),50,50,"1",cb_addscore)

    Fl::check();
    Fl::redraw();

    mtime -= 3;
    Fl::repeat_timeout(3, whackamole_window::showmole);
    return;
  }
}

メンバー関数は、クラスで次のように定義されています

static void showmole(void*);

静的メンバーはクラスの他のメンバーにアクセスできないため (他の静的メンバーを除く)、次のエラーが発生します。

mol111j.cpp:176:whackamole_window::m' in static member function mole111j.cpp:177: invalid use of member静的メンバー関数でのメンバー whackamole_window::mb' の使用が無効です

関数を非静的にしようとすると、タイマーが機能しないようです。では、これを回避し、タイマーを使用して m および mb メンバーにアクセスするにはどうすればよいでしょうか?

4

2 に答える 2

0

FLTK についてはよくわかりませんが、showMole()メソッドがvoid *渡された値を取得しているように見えます。これは、タイマーを準備するときにおそらく指定できます。

タイマーを準備するときにウィンドウへのポインターを指定すると、void *値をキャストして戻しwhackamole_window *、結果のポインターを使用して非静的メンバーにアクセスできます。

于 2010-12-07T01:21:58.783 に答える
0

m と mb はどちらも静的変数ですか? そうでない場合は、あなたのように静的関数でそれらを使用することはできません。

それらを静的にするか、渡します。

于 2010-12-07T01:22:38.973 に答える