2016-11-19 3 views
-1

Ich habe eine Klasse erstellt, die eine SPI Flash-Chip-Bibliothek namens SerialFlash abstrahiert, indem eine abstrakte Klasse von Print.h erstellt wird. Wenn ich versuche, mithilfe der ArduinoJson Bibliothek dies zu drucken, ich einen Fehler:C++ polymorphe Druckfunktion löst nicht richtig

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

Die Datei oben in den Fehlern verwies hier ist: https://github.com/bblanchon/ArduinoJson/blob/master/include/ArduinoJson/Internals/JsonPrintable.hpp

für die Klasse Dies ist die Header-Datei:

#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 

Und die CPP-Datei:

#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; 
}; 

Im Allgemeinen Sie verwenden Druckfunktion als: root.printTo (Seriell). Dieser Code basiert auf einer Abstraktion (die ich habe vorher zu arbeiten) genannt Chunked Ausgabe, die hier zu sehen sind: https://github.com/bblanchon/ArduinoJson/wiki/Bag-of-Tricks

Hat jemand irgendwelche Anhaltspunkte für mich, um herauszufinden, warum ich <unresolved overloaded function type> statt Print & bin immer?

Antwort

0

<unresolved overloaded function type> bedeutet, dass der Compiler eine Funktion mit mehreren Überladungen gefunden hat und nicht weiß, welche zu verwenden ist.

Sie haben wahrscheinlich mehrere serialFlashPrint() in Ihrem Code oder Bibliotheken.

Wenn nicht, dann können Sie die Most vexing parse ausgelöst haben:

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