我一直在使用电容按钮为Arduino写Pong游戏,并且得到了“没有匹配函数来调用'CapacitiveSensor :: CapacitiveSensor()'”错误。出现错误:
//Input.cpp
#include <CapacitiveSensor.h>
#include "Input.h"
#include "Arduino.h"
Input::Input (byte sPin, byte rPin1, byte rPin2) { //I get the error on this line
upButton = CapacitiveSensor(sPin, rPin1);
downButton = CapacitiveSensor(sPin, rPin2);
}
//Continued for bChk
然后是标题:
//Input.h
#ifndef Input_H
#define Input_H
#include "Arduino.h"
#include <CapacitiveSensor.h>
class Input{
public:
const static byte up = 0;
const static byte down = 1;
CapacitiveSensor upButton;
CapacitiveSensor downButton;
boolean bChk(byte button);
Input(byte sPin, byte rPin1, byte rPin2);
};
#endif
我知道标准命名约定说常量应该大写,但是它们已经被保留了。而且变量等应该是私有的。我很懒。另外,在与我调用构造函数的错误不同的一行上得到了错误……我也没有创建CapacitiveSensor类。
如果有问题,我在Mac上(我对此表示怀疑)。
最佳答案
看起来CapacitiveSensor
类未定义默认构造函数,因此Input
类不知道如何构造upButton
和downButton
。
一种选择是在upButton
构造函数中初始化downButton
和Input
,并传递所需的参数:
class Input {
public:
Input(byte sPin, byte rPin1, byte rPin2)
: upButton(CapacitiveSensor(sPin, rPin1))
, downButton(CapacitiveSensor(sPin, rPin2))
{}
CapacitiveSensor upButton;
CapacitiveSensor downButton;
};
另一个选择是转换指针中的那些成员,并使用
new
为其分配必需的参数。例:class Input {
public:
Input() : upButton(NULL), downButton(NULL) {}
void initializeMembers(byte sPin, byte rPin1, byte rPin2) {
upButton = new CapacitiveSensor(sPin, rPin1);
downbutton = new CapacitiveSensor(sPin, rPin2);
}
CapacitiveSensor *upButton;
CapacitiveSensor *downButton;
};
或者最终,您可以扩展
CapacitiveSensor
类,定义一个默认构造函数,并将固定的参数传递给超级构造函数。我相信这不是您想要的,但无论如何:class CustomCapacitiveSensor : public CapacitiveSensor {
public:
CustomCapacitiveSensor() {
CapacitiveSensor(1, 2);
}
};
关于c++ - 电容式传感器问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14077456/