gpt4 book ai didi

c++ - 子类调用基类构造函数,然后在子类 Arduino C++ 中使用基类的实例方法

转载 作者:行者123 更新时间:2023-11-27 22:57:24 24 4
gpt4 key购买 nike

我有一个基类 FCBRelay,在该类中,它处理将继电器设置为引脚并保持一般方法,例如 ononForTime

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

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

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

这个想法是为了在我的 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);
}

关于c++ - 子类调用基类构造函数,然后在子类 Arduino C++ 中使用基类的实例方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31484023/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com