c++: undefined reference bei static member variablen
wergor 26.02.2016 - 23:06 3120 7
wergor
connoisseur de mimi
|
beim kompilieren des folgenden codes gibt der compiler warnings aus: #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);
}
sketch\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()' 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.
Bearbeitet von JC am 27.02.2016, 11:15
|
murcielago
Dr. Doom
|
weil sie nicht initalisiert werden...
|
PuhBär
Schau ned so genau
|
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).
|
wergor
connoisseur de mimi
|
weil sie nicht initalisiert werden... was meinst du genau? 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). 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). mit ging es eigentlich um die zeilen sketch\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_
|
that
Hoffnungsloser Optimist
|
Dir fehlt ein DueFlashStorage EEPROMHandler::dfs_;
damit es die Variable auch wirklich gibt.
|
wergor
connoisseur de mimi
|
Dir fehlt ein
DueFlashStorage EEPROMHandler::dfs_;
damit es die Variable auch wirklich gibt. wo gehört das hin? edit: habs gefunden. danke! jetzt checke ich auch murcielago's post
Bearbeitet von wergor am 27.02.2016, 10:58
|
murcielago
Dr. Doom
|
ja sorry, um die zeit war ich nicht mehr so ausgiebig in meiner antwort
|
wergor
connoisseur de mimi
|
ja sorry, um die zeit war ich nicht mehr so ausgiebig in meiner antwort macht nix mich wundert nur dass ich früher noch nie über dieses problem gestolpert bin.
|