2010-12-07 4 views
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*); 

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

mole111j.cpp:176: invalid use of member whackamole_window::m' in static member function mole111j.cpp:177: invalid use of member whackamole_window::mb' in static member function

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

ответ

0

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

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

+0

Извините, моя новичка, но как мне все это сделать? Я как-то знаю, как использовать указатели, но я не понимаю, что вы подразумеваете под литью void * назад – supahot 2010-12-07 01:32:57

+0

`whackamole_window * thisWindow = (whackamole_window *) argPtr;` - где argPtr - это пустота *, которая была передана методу. – davmac 2010-12-10 04:09:39

0

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^