电容传感器问题

时间:2012-12-29 00:19:13

标签: c++ arduino

我一直在使用电容式按钮为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上,如果重要的话(我对此表示怀疑)。

2 个答案:

答案 0 :(得分:1)

看起来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);
    }
};

答案 1 :(得分:1)

要使用您显示的代码,CapacitiveSensor类必须同时具有不带参数的默认构造函数和等于运算符的重载(赋值)。这不太可能是你想要的,因为它构造一个临时对象是浪费的,然后将它分配给类成员。

要构建成员对象,请使用以下代码:

Input::Input(byte sPin, byte rPin1, byte rPin2) :
  upButton(sPin, rPin1), downButton(sPin, rPin2)
{
...
}

这将直接构造两个对象实例。