J'ai un petit morceau de code Arduino qui me donne l'erreur de compilation:En utilisant des méthodes virtuelles avec Arduino
error: no matching function for call to 'PushButton::PushButton(int, LeftButtonEvent*)
Dans son propre fichier d'en-tête j'ai deux classes:
class Event
{
public:
virtual void handle() {
}
};
class PushButton
{
public:
PushButton(int pinButton, Event *event);
uint8_t read();
private:
uint8_t _buttonState;
Event _event;
};
et le fichier source pour les classes:
PushButton::PushButton(int pinButton, Event *event)
{
// implementation
}
uint8_t PushButton::read() {
// implementation
return _buttonState;
}
Dans le fichier principal d'en-tête d'esquisse ino J'ai défini une nouvelle classe qui étend la classe Event:
class LeftButtonEvent : public Event {
public:
virtual void handle();
};
Et dans le fichier source croquis que je fournis la mise en œuvre de la méthode de la poignée et l'utiliser:
void LeftButtonEvent::handle() {
log("Is working!!!!!");
}
LeftButtonEvent leftButtonEvent;
PushButton leftButton;
void setup() {
leftButton = PushButton(PIN_LEFT_BUTTON, &leftButtonEvent);
}
Je me attendais le constructeur pour PushButton d'accepter un type de LeftButtonEvent car elle étend la classe de l'événement, mais il semble que ça ne l'aime pas. Ai-je raté quelque chose?
Quel compilateur utilisez-vous. Cela devrait fonctionner. –
Pouvez-vous créer un test comme 'struct Base {}; struct Derived: Base {} d; void f (Base * p) {}; int main {f (&d); return 0;} 'et voyez si cela fonctionne? ... et puis développez à partir de là –
Vous essayez de créer un objet' PushButton' dans la ligne 'PushButton leftButton' sans spécifier d'arguments qui nécessite un constructeur par défaut sans paramètres.Vous n'avez pas un tel constructeur sur la classe 'PushButton' – Josef