Переопределяющее объявление типа «функция виртуального типа (тип) = значение» в C ++ - PullRequest
0 голосов
/ 06 апреля 2020

Я пытаюсь адаптировать библиотеки Arduino HardwareSerial и Print, чтобы они печатали в моем UDP. myudpSerial.print () и .println () работают хорошо, но вызов myupdSerial.write (c) - нет. Соответствующий код в Print.h:

class Print:
{
    virtual ~Print() {}
    virtual size_t write(uint8_t) = 0; // I suspect I have to do something with this
    size_t write(const char *str)
    {
        if(str == NULL) {
            return 0;
        }
        return write((const uint8_t *) str, strlen(str));
    }
    virtual size_t write(const uint8_t *buffer, size_t size);
    size_t write(const char *buffer, size_t size)
    {
        return write((const uint8_t *) buffer, size);
    }
}

Мой собственный класс выглядит следующим образом:

class UdpSerial: public HardwareSerial{
    using HardwareSerial::HardwareSerial;
    public: 
    size_t write(const uint8_t *buffer, size_t size) override;
    //size_t write(uint8_t) override = 0;  // I suspect I have to override this
};

Это работает, потому что класс Print имеет перегрузки, которые все в конечном итоге используют функцию write (). Но когда я звоню myupdSerial.write('B');, он говорит мне
error: no matching fucntion call to 'myudpSerial::write(char&)'
и предлагает size_t write(const uint8_t *buffer, size_t size) override; в качестве кандидата.

Как я уже говорил, я подозреваю, что должен переопределить size_t write(uint8_t) = 0, но =0 в конце сбивает меня с толку, и я не знаю, как это сделать, и как называется эта конструкция, чтобы я мог ее погуглить.

Предложения приветствуются.

1 Ответ

0 голосов
/ 06 апреля 2020

Очевидно, мне пришлось скопировать несколько перегрузок для write () из HardwareSerial, потому что они были встроены. Это объясняет, почему они работали для Serial, а не для myupdSerial.
Итак: inline перегрузки не наследуются. Имеет смысл теперь, когда я читаю на них.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...