URL: https://www.overclockers.at/coding-stuff/c-undefined-reference-bei-static-member-variablen_245604/page_1 - zur Vollversion wechseln!
beim kompilieren des folgenden codes gibt der compiler warnings aus:
Code: CPP#include <DueFlashStorage.h> class EEPROMHandler { public: EEPROMHandler(); ~EEPROMHandler(); static void read(uint8_t address, byte& content) { content = dfs_.read(address); } static void write(uint8_t address, byte content) { dfs_.write(address, content); } private: static DueFlashStorage dfs_; }; EEPROMHandler eepromHandler; void setup() { // put your setup code here, to run once: eepromHandler.write(0, 1); } void loop() { // put your main code here, to run repeatedly: byte a; eepromHandler.read(0, a); Serial.println(a); while(1); }
ich komme nicht drauf woran das liegt. in anderen klassen habe ich auch static members, aber nur in dieser klasse gibt es die warnings beim kompilieren.Zitatsketch\DueFlashStorageUndefinedReferenceTest.ino.cpp.o: In function `EEPROMHandler::write(unsigned char, unsigned char)':
C:\Users\wergor\Documents\Arduino\DueFlashStorageUndefinedReferenceTest/DueFlashStorageUndefinedReferenceTest.ino:16: warning: undefined reference to `EEPROMHandler::dfs_'
sketch\DueFlashStorageUndefinedReferenceTest.ino.cpp.o: In function `loop':
C:\Users\wergor\Documents\Arduino\DueFlashStorageUndefinedReferenceTest/DueFlashStorageUndefinedReferenceTest.ino:35: warning: undefined reference to `EEPROMHandler::dfs_'
sketch\DueFlashStorageUndefinedReferenceTest.ino.cpp.o: In function `__static_initialization_and_destruction_0':
C:\Users\wergor\Documents\Arduino\DueFlashStorageUndefinedReferenceTest/DueFlashStorageUndefinedReferenceTest.ino:23: warning: undefined reference to `EEPROMHandler::EEPROMHandler()'
C:\Users\wergor\Documents\Arduino\DueFlashStorageUndefinedReferenceTest/DueFlashStorageUndefinedReferenceTest.ino:23: warning: undefined reference to `EEPROMHandler::~EEPROMHandler()'
weil sie nicht initalisiert werden...
Constructor und Destructor sind deklariert aber nicht implementiert. Entweder gleich löschen aus der Klassendefinition, oder bei neueren Compiler "= default" am Ende schreiben, um anzugeben, dass du die Defaultimplementierung willst (die auch erstellt wird wenn du sie nicht explizit deklarierst).
was meinst du genau?Zitat von murcielagoweil sie nicht initalisiert werden...
in der klasse die ich tatsächlich benutze sind constructor und destructor implementiert (mir ist gar nicht aufgefallen dass für die auch warnings gemeldet wurden).Zitat von PuhBärConstructor und Destructor sind deklariert aber nicht implementiert. Entweder gleich löschen aus der Klassendefinition, oder bei neueren Compiler "= default" am Ende schreiben, um anzugeben, dass du die Defaultimplementierung willst (die auch erstellt wird wenn du sie nicht explizit deklarierst).
Zitatsketch\DueFlashStorageUndefinedReferenceTest.ino.cpp.o: In function `EEPROMHandler::write(unsigned char, unsigned char)':
C:\Users\wergor\Documents\Arduino\DueFlashStorageUndefinedReferenceTest/DueFlashStorageUndefinedReferenceTest.ino:16: warning: undefined reference to `EEPROMHandler::dfs_'
sketch\DueFlashStorageUndefinedReferenceTest.ino.cpp.o: In function `loop':
C:\Users\wergor\Documents\Arduino\DueFlashStorageUndefinedReferenceTest/DueFlashStorageUndefinedReferenceTest.ino:35: warning: undefined reference to `EEPROMHandler::dfs_
Dir fehlt ein
Code: CPPDueFlashStorage EEPROMHandler::dfs_;
wo gehört das hin?Zitat von thatDir fehlt einCode: CPPDueFlashStorage EEPROMHandler::dfs_;
damit es die Variable auch wirklich gibt.
ja sorry, um die zeit war ich nicht mehr so ausgiebig in meiner antwort
macht nixZitat von murcielagoja sorry, um die zeit war ich nicht mehr so ausgiebig in meiner antwort
overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025