我一直在使用电容按钮为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类不知道如何构造upButtondownButton

一种选择是在upButton构造函数中初始化downButtonInput,并传递所需的参数:

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/

10-12 20:51