Нужна помощь со статическими/нестатическими членами

У меня есть статическая функция-член, которая выглядит так:

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*);

Поскольку статические члены не могут получить доступ к другим членам класса (кроме других статических членов), я получаю следующую ошибку:

mole111j.cpp:176: недопустимое использование члена whackamole_window::m' in static member function mole111j.cpp:177: invalid use of memberwhackamole_window::mb' в статической функции-члене

Кажется, что таймер не работает, если я пытаюсь сделать функцию нестатической. Итак, как я могу обойти это и получить доступ к членам m и mb с помощью таймера?


person supahot    schedule 07.12.2010    source источник


Ответы (2)


Я мало что знаю о FLTK, но похоже, что ваш метод showMole() получает переданное значение void *, которое вы предположительно можете указать, когда включаете таймер.

Если вы предоставляете указатель на окно, когда запускаете таймер, вы можете преобразовать значение void * обратно в whackamole_window * и использовать полученный указатель для доступа к нестатическим членам.

person davmac    schedule 07.12.2010
comment
Простите мой новичок, а как мне все это сделать? Я как бы знаю, как использовать указатели, но я не понимаю, что вы имеете в виду, говоря void * назад - person supahot; 07.12.2010
comment
whackamole_window *thisWindow = (whackamole_window *) argPtr; — где argPtr — значение void *, которое было передано методу. - person davmac; 10.12.2010

Являются ли m и mb статическими переменными? Если нет, вы не можете использовать их в статической функции, как вы.

Сделайте их статичными или передайте их.

person Paul    schedule 07.12.2010
comment
Это нестатические переменные. как я могу передать их? - person supahot; 07.12.2010