子类调用 Base Class 构造函数然后在子类 Arduino C++ 中使用 Base Class 的实例方法

Subclass calling Base Class constructor then using instance method of Base Class in Subclass Arduino C++

我有一个 Base Class FCBRelay 并且在那个 class 中它处理将继电器设置到引脚并保持一般方法,例如 ononForTime.

当我尝试在 Subclass 中调用 onForTime 时,它不会编译并给出错误:

cannot call member function 'void FCBRelay::onForTime(int)' without object

现在我明白了错误的意思,因为 onForTime 方法不是 static 但我的 Subclass 构造函数调用了 Base Class 构造函数也是。或者说我的理解。

这个想法是为了在我的 main 函数中更具描述性。我可以调用 waterPump.squirt(2);

而不是调用 waterPump.onForTime(2);

我的Class如下


FCBRelay.h

#ifndef FCBRelay_H
#define FCBRelay_H

#include <Arduino.h>

class FCBRelay {
  public:
    FCBRelay(int pinNo);

    int delayTime;

    void tick();
    void onForTime(int timeInSeconds);

  private:
    int _pinNumber;
    int _lastTickMillis;

    void on();
    void off();
};

#endif

FCBRelay.cpp

#include "FCBRelay.h"

FCBRelay::FCBRelay(int pinNo) {
  _pinNumber = pinNo;
  pinMode(_pinNumber, OUTPUT);
}

void FCBRelay::onForTime(int timeInSeconds) {
  delayTime = timeInSeconds * 1000;
  on();
}

void FCBRelay::tick() {
  unsigned long currentMillis = millis();
  if((currentMillis - _lastTickMillis) >= delayTime) {
      _lastTickMillis = currentMillis;
      off();
  }
}

void FCBRelay::on() {
  digitalWrite(_pinNumber, HIGH);
}

void FCBRelay::off() {
  digitalWrite(_pinNumber, LOW);
}

FCBWaterPump.h

#ifndef FCBWaterPump_H
#define FCBWaterPump_H

#include "FCBRelay.h"

class FCBWaterPump : public FCBRelay {
  public:
    FCBWaterPump(int pinNo);

    void squirt(int timeInSeconds);
};

#endif

FCBWaterPump.cpp

#include "FCBWaterPump.h"

FCBWaterPump::FCBWaterPump(int pinNo) : FCBRelay(pinNo) {

}

void squirt(int timeInSeconds) {
  FCBRelay::onForTime(timeInSeconds);
}

任何帮助都将是很好的,谢谢。

你不小心写了一个独立的函数。这就是为什么没有对象。

改变这个:

void squirt(int timeInSeconds) {
  FCBRelay::onForTime(timeInSeconds);
}

对此:

void FCBWaterPump::squirt(int timeInSeconds) {
//   ^^^^^^^^^^^^^^
  FCBRelay::onForTime(timeInSeconds);
}