2016-11-19 8 views
-1

Print.h의 추상 클래스를 만들어 SerialFlash라는 SPI 플래시 칩 라이브러리를 추상화하는 클래스를 만들었습니다. https://github.com/bblanchon/ArduinoJson/blob/master/include/ArduinoJson/Internals/JsonPrintable.hppC++ polymorphic 인쇄 기능이 제대로 해석되지 않습니다.

이 클래스의 헤더 파일입니다 :

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&' 

위의 오류에서 참조 파일은 여기에 있습니다 : 나는 ArduinoJson 라이브러리를 사용하여 인쇄하려고하면 오류가 발생합니다

#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). 내가 대신 인쇄 &의 <unresolved overloaded function type>을 받고있는 이유 https://github.com/bblanchon/ArduinoJson/wiki/Bag-of-Tricks

사람이 알아낼 나를 위해 어떤 단서를 가지고 있습니까 :이 코드는 (내가 이전에 일을 가지고) 여기에서 볼 수있다 청크 분할 출력라는 추상화를 기반으로?

답변

0

<unresolved overloaded function type>은 컴파일러가 여러 오버로드가있는 함수를 찾고 사용할 수있는 함수를 알 수 없음을 의미합니다.

코드 또는 라이브러리에 여러 개의 serialFlashPrint()이있을 가능성이 큽니다.

SerialFlashPrint serialFlashPrint; // <- creates an instance of SerialFlashPrint 
SerialFlashPrint serialFlashPrint(); // <- declares a function returning a SerialFlashPrint 
:

하지 않으면, 당신은 Most vexing parse 유발했을 수 있습니다