で仮想メソッドを使用する:私は私のコンパイルエラーを与えるArduinoのコードの小片を持っているArduinoの
class Event
{
public:
virtual void handle() {
}
};
class PushButton
{
public:
PushButton(int pinButton, Event *event);
uint8_t read();
private:
uint8_t _buttonState;
Event _event;
};
とソースファイル:独自のヘッダファイルで
error: no matching function for call to 'PushButton::PushButton(int, LeftButtonEvent*)
を、私は2つのクラスを持っていますクラス:
PushButton::PushButton(int pinButton, Event *event)
{
// implementation
}
uint8_t PushButton::read() {
// implementation
return _buttonState;
}
主なinoスケッチのヘッダーファイルでは、イベントクラスを拡張する新しいクラスを定義しました:
class LeftButtonEvent : public Event {
public:
virtual void handle();
};
スケッチソースファイルに私がハンドルメソッドの実装を提供し、それを使用します。
void LeftButtonEvent::handle() {
log("Is working!!!!!");
}
LeftButtonEvent leftButtonEvent;
PushButton leftButton;
void setup() {
leftButton = PushButton(PIN_LEFT_BUTTON, &leftButtonEvent);
}
を私はそれがEventクラスを拡張するためLeftButtonEventタイプを受け入れるようにプッシュボタンのコンストラクタを期待していました、それはそれが好きではないように見えます。 何か不足していますか?
どのコンパイラを使用していますか。それはうまくいくはずです。 –
'struct Base {};のようなテストを作成できますか?構造体の導出:ベース{} d; void f(Base * p){}; –
'PushButton leftButton'行に' PushButton'オブジェクトを作成しようとしていますが、これは引数を指定せずに 'パラメータを持たないデフォルトのコンストラクタです。あなたは 'PushButton'クラスにこのようなコンストラクタを持っていません。問題がありますか? – Josef