сделать библиотеку наследником Stream
- Войдите на сайт для отправки комментариев
Втр, 28/03/2017 - 15:51
Добрый день. Делаю библиотечку под свою клавиатуру. Под это дело передалал PS2Keyboar
Работает, можно из программы делать такое:
#include "matrixKB.h" matrixKB keyboard; void setup() { delay(1000); keyboard.begin(); Serial.begin(9600); Serial.println("Keyboard Test:"); } void loop() { if (keyboard.available()) { // read the next key char c = keyboard.read(); // otherwise, just print all normal characters Serial.print(c); } }
внутри она на прерываниях по таймеру и сканировании портов. Но вот задался вопросом, можно ли этот класс matrixKB отнаследовать от Stream. Просто "в нагляк" указать :public Stream в определении класса - не получается.
ругается:
Simple_Test:31: error: cannot declare variable 'keyboard' to be of abstract type 'matrixKB' matrixKB keyboard; ^ In file included from /home/KB_test/Simple_Test/Simple_Test.ino:28:0: /home/MySketchbook/build/sketch/matrixKB.h:149:7: note: because the following virtual functions are pure within 'matrixKB': class matrixKB : public Stream ^ In file included from /home/.arduino15/packages/arduino/hardware/avr/1.6.17/cores/arduino/Stream.h:26:0, from /home/.arduino15/packages/arduino/hardware/avr/1.6.17/cores/arduino/HardwareSerial.h:29, from /home/.arduino15/packages/arduino/hardware/avr/1.6.17/cores/arduino/Arduino.h:232, from /home/MySketchbook/build/sketch/Simple_Test.ino.cpp:1: /home/.arduino15/packages/arduino/hardware/avr/1.6.17/cores/arduino/Print.h:48:20: note: virtual size_t Print::write(uint8_t) virtual size_t write(uint8_t) = 0; ^ In file included from /home/.arduino15/packages/arduino/hardware/avr/1.6.17/cores/arduino/HardwareSerial.h:29:0, from /home/.arduino15/packages/arduino/hardware/avr/1.6.17/cores/arduino/Arduino.h:232, from /home/MySketchbook/build/sketch/Simple_Test.ino.cpp:1: /home/.arduino15/packages/arduino/hardware/avr/1.6.17/cores/arduino/Stream.h:61:17: note: virtual int Stream::peek() virtual int peek() = 0; ^ /home/.arduino15/packages/arduino/hardware/avr/1.6.17/cores/arduino/Stream.h:62:18: note: virtual void Stream::flush() virtual void flush() = 0; ^ exit status 1 cannot declare variable 'keyboard' to be of abstract type 'matrixKB'
Я в плюсах не силен, однако. Помогите понять, или просто подскажите, что сделать, чтобы нормально унаследоваться от Stream? Может какие-то методы обязательно нужно реализовать?
Да. Мало обьвить свой класс наследником, надо обязательно переопределить и реализовать те виртуальные функции в родительском классе, которые объявлены абстрактными.
Абстрактные функции в С обьявляются например так:
virtual
void
flush() = 0;
в базовом классе. В классе наследнике обязательно должна быть ее реализация
Спасибо. Вроде бы получилось. Буду проверять.