Неразрешенный тип перегруженной функции, когда функция принадлежит классу

Я использую класс Ticker в своем коде следующим образом внутри моего класса, называемого Крюкниндзя:

void HookNinja::pulser(float period, float onTime) {
  _ticker1.attach(period, HookNinja::pulseUp, onTime);
}

void HookNinja::pulseUp(float onTime) {
  digitalWrite(2, LOW);
  _ticker2.attach(onTime, HookNinja::pulseDown);
}

void HookNinja::pulseDown() {
  digitalWrite(2, HIGH);
  _ticker2.detach();
}

Согласно документации Ticker, второй параметр — это функция, но обычная, моя находится внутри класса, и каждый раз, когда я пытаюсь скомпилировать, я получаю:

error: no matching function for call to 'Ticker::attach
(float&, <unresolved overloaded function type>, float&)'

Это происходит здесь и здесь, но из этого ответа я не могу понять, что мне делать в моем коде, чтобы это исправить.

Примечание: _ticker1 и 2 определены в моем файле заголовков.


person DomingoSL    schedule 23.04.2016    source источник


Ответы (1)


Я подозреваю, что это может быть проблемой порядка определения: сначала вы используете pulseUp(), а затем определяете его; сначала вы используете pulseDown(), а затем определяете его.

Мое предложение: попробуйте инвертировать порядок: сначала определите pulseDown(), затем pulseUp() и, наконец, pulser()

void HookNinja::pulseDown() {
  digitalWrite(2, HIGH);
  _ticker2.detach();
}

void HookNinja::pulseUp(float onTime) {
  digitalWrite(2, LOW);
  _ticker2.attach(onTime, HookNinja::pulseDown);
}

void HookNinja::pulser(float period, float onTime) {
  _ticker1.attach(period, HookNinja::pulseUp, onTime);
}

p.s.: извините за мой плохой английский

person max66    schedule 23.04.2016