-1

Print.h の抽象クラスを作成して、SerialFlash という SPI フラッシュ チップ ライブラリを抽象化するクラスを作成しました。ArduinoJson ライブラリを使用してこれに出力しようとすると、エラーが発生します。

src/FlashMemory.cpp:99:36: error: no matching function for call to 'ArduinoJson::JsonObject::printTo(<unresolved overloaded function type>)'
root.printTo(serialFlashPrint);
^

lib/ArduinoJson/include/ArduinoJson/Internals/../Internals/JsonPrintable.hpp:34:10: note: size_t ArduinoJson::Internals::JsonPrintable<T>::printTo(Print&) const [with T = Ardu
inoJson::JsonObject; size_t = unsigned int]
size_t printTo(Print &print) const {
^
lib/ArduinoJson/include/ArduinoJson/Internals/../Internals/JsonPrintable.hpp:34:10: note:   no known conversion for argument 1 from '<unresolved overloaded function type>' to 
'Print&'

上記のエラーで参照されているファイルは次のとおりです: https://github.com/bblanchon/ArduinoJson/blob/master/include/ArduinoJson/Internals/JsonPrintable.hpp

これは、クラスのヘッダー ファイルです。

#include <Arduino.h>
#include <SerialFlash.h>
#include "Print.h"

#ifndef _SerialFlashPrint_h_
#define _SerialFlashPrint_h_

class SerialFlashPrint : public Print {
  public:
    SerialFlashPrint(SerialFlashFile *file);

    virtual size_t write(uint8_t);
    virtual size_t write(const uint8_t *buffer, size_t size);

  private:
    char buf[1];
    uint16_t _current_byte;
    SerialFlashFile * _file;
};

#endif

そして cpp ファイル:

#include "serialFlashPrint.h"

SerialFlashPrint::SerialFlashPrint(SerialFlashFile * file) : Print() {
  this->_file = file;
  this->_current_byte = 0;
}

size_t SerialFlashPrint::write(uint8_t c) {
  if(_current_byte == 0){
    _file->erase();
    _file->seek(0);
  }
  sprintf(buf, "%c", c);
  _file->write(buf, 1);
  _current_byte++;
  return 0;
}

size_t SerialFlashPrint::write(const uint8_t *buffer, size_t size){
  _file->erase();
  _file->seek(0);
  _file->write(buffer, size);
  _file->write(NULL, 1);
  return 0;
};

通常、印刷機能は root.printTo(Serial) として使用します。このコードは、 https ://github.com/bblanchon/ArduinoJson/wiki/Bag-of-Tricks で確認できる Chunked 出力と呼ばれる抽象化 (以前に作業したもの) に基づいています。

<unresolved overloaded function type>Print&の代わりになぜ私が得ているのかを理解するための手がかりを誰かが持っていますか?

4

1 に答える 1