c++: undefined reference bei static member variablen

Seite 1 von 1 - Forum: Coding Stuff auf overclockers.at

URL: https://www.overclockers.at/coding-stuff/c-undefined-reference-bei-static-member-variablen_245604/page_1 - zur Vollversion wechseln!


wergor schrieb am 26.02.2016 um 23:06

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);
}
Zitat
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.


murcielago schrieb am 26.02.2016 um 23:17

weil sie nicht initalisiert werden...


PuhBär schrieb am 26.02.2016 um 23:29

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 schrieb am 26.02.2016 um 23:59

Zitat von murcielago
weil sie nicht initalisiert werden...
was meinst du genau?
Zitat von PuhBär
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
Zitat
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 schrieb am 27.02.2016 um 10:31

Dir fehlt ein

Code: CPP
DueFlashStorage EEPROMHandler::dfs_;

damit es die Variable auch wirklich gibt.


wergor schrieb am 27.02.2016 um 10:50

Zitat von that
Dir fehlt ein

Code: CPP
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 :D


murcielago schrieb am 27.02.2016 um 21:29

ja sorry, um die zeit war ich nicht mehr so ausgiebig in meiner antwort :D


wergor schrieb am 28.02.2016 um 01:09

Zitat von murcielago
ja sorry, um die zeit war ich nicht mehr so ausgiebig in meiner antwort :D
macht nix ;)
mich wundert nur dass ich früher noch nie über dieses problem gestolpert bin.




overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025