сделать библиотеку наследником 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? Может какие-то методы обязательно нужно реализовать?
Да. Мало обьвить свой класс наследником, надо обязательно переопределить и реализовать те виртуальные функции в родительском классе, которые объявлены абстрактными.
Абстрактные функции в С обьявляются например так:
virtualvoidflush() = 0;в базовом классе. В классе наследнике обязательно должна быть ее реализацияСпасибо. Вроде бы получилось. Буду проверять.