2012-12-29 62 views
0

我一直在寫一個使用電容式按鈕的Arduino的Pong遊戲,我一直在得到一個「沒有匹配函數調用'CapacitiveSensor :: CapacitiveSensor()'」的錯誤。下面是這個類的代碼我一直在用錯誤:CapacitiveSensor problems

//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上,如果它很重要(我懷疑它)。

回答

1

貌似CapacitiveSensor類沒有定義默認構造函數,因此Input類不知道如何構建upButtondownButton

一種選擇是初始化upButtondownButtonInput構造,傳遞所需的參數:

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

要使用已顯示的代碼中,CapacitiveSensor類就必須有兩個默認的構造函數不帶參數和等於運算符重載(分配) 。這是不太可能的,因爲它構造了一個臨時對象,然後將其分配給類成員,這是浪費。

構建成員對象使用此代碼:

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

這將直接構建兩個對象實例。