错误:调用计数器::计数器()没有匹配函数
error: no matching function for call to Counter::Counter()
当我尝试编译Arduino草图时,我收到此错误。 我看不出它认为我试图在没有争论的情况下打电话给Counter::Counter
。 这是怎么回事?
sketch/periodic_effect.cpp: In constructor 'PeriodicEffect::PeriodicEffect(uint32_t, uint32_t, Counter::Mode)':
periodic_effect.cpp:4: error: no matching function for call to 'Counter::Counter()'
PeriodicEffect::PeriodicEffect( uint32_t durationMs, uint32_t periods, Counter::Mode mode) : Runnable(), periods(periods) {
periodic_effect.cpp
#include <Arduino.h>
#include "periodic_effect.h"
PeriodicEffect::PeriodicEffect( uint32_t durationMs, uint32_t periods, Counter::Mode mode) : Runnable(), periods(periods) {
intervalMs = durationMs / periods;
index = Counter(intervalMs, mode);
}
void PeriodicEffect::run() {
uint32_t currTimeMs = millis();
if( (currTimeMs - prevTimeMs) > intervalMs ) {
applyChange();
prevTimeMs = currTimeMs;
index.increment();
}
}
periodic_effect.h
#ifndef PERIODIC_EFFECT_H
#define PERIODIC_EFFECT_H
#include "counter.h"
#include "runnable.h"
class PeriodicEffect : public Runnable {
public:
PeriodicEffect( uint32_t durationMs, uint32_t periods, Counter::Mode mode = Counter::Mode::RESETTING );
Counter index;
private:
uint32_t intervalMs, periods, prevTimeMs;
virtual void applyChange() = 0;
void run();
virtual void setup() = 0;
};
#endif
计数器.h
#ifndef COUNTER_H
#define COUNTER_H
#include <stdint.h>
class Counter {
public:
enum Mode { RESETTING, RETURNING };
Counter(uint32_t limit, Counter::Mode mode = RESETTING, uint32_t index = 0);
uint32_t getIndex();
void increment();
float percent();
private:
bool goingForward;
uint32_t index;
const uint32_t limit;
Counter::Mode mode;
void incrementReturning();
void incrementResetting();
};
#endif
柜台.cpp
#include "counter.h"
Counter::Counter(uint32_t limit, Counter::Mode mode, uint32_t index) : index(index), limit(limit), mode(mode) {
goingForward = true;
}
uint32_t Counter::getIndex() {
return index;
}
void Counter::increment() {
switch( mode ) {
case RESETTING : incrementResetting();
case RETURNING : incrementReturning();
}
}
void Counter::incrementResetting() {
index = (index + 1) % limit;
}
void Counter::incrementReturning() {
if( goingForward ) {
index++;
if( index >= limit ) {
index = limit - 1;
goingForward = false;
}
} else {
index--;
if( index <= 0 ) {
index = 1;
goingForward = true;
}
}
}
float Counter::percent() {
return (float) index / (float) limit;
}
您的类PeriodicEffect
有一个 Counter
成员变量,没有构造函数。这意味着成员变量需要默认构造,即由没有参数的构造函数构造。您尚未提供。
您可以为Counter
提供默认构造函数,也可以让现有构造函数具有所有参数的默认值。或者,您可以使用初始值设定项列表创建一个PeriodicEffect
构造函数,以提供正确的参数index
。
PeriodicEffect::PeriodicEffect(
uint32_t durationMs, uint32_t periods, Counter::Mode mode) :
Runnable(), periods(periods) { /* ... */
PeriodicEffect
有一个成员Counter index;
。 由于index
不在此构造函数的成员初始值设定项列表中,因此它是默认构造的。
声明
index = Counter(intervalMs, mode);
构造函数内部是赋值,而不是初始化。 太迟了。
相关文章:
- "error: no matching function for call to"构造函数错误
- 什么时候调用组成单元对象的析构函数
- 继承函数的重载解析
- 映射构造函数,同时在C++中实现计数器
- 错误:调用计数器::计数器()没有匹配函数
- 在模板类构造函数中创建计数器
- C++中使用构造函数和析构函数的对象计数器
- C++实现了带有引用计数器的sharedpointer函数
- 计数器函数不基于以前返回的值构建
- 在 Rust 中捕获循环计数器副本的函数
- 查询性能计数器函数在在线判断中的使用
- C++带有getche()函数的短语计数器
- C++函数内部的递归计数器
- 我想开发一个函数,它接受任何类型的向量并返回一个映射(类似于 python 中的计数器)
- 如何将计数器变量从一个函数传递到main函数
- Visual c++中的函数性能计数器
- 将动态数组对象传递给友元函数不会累积计数器
- 行和字计数器函数不能正确地相加
- 如何在qt中显示计数器函数?
- 使用Clang中具有函数本地类型的模板的类型计数器出现意外结果