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 memberwhackamole_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 回答