Statische Objecte



  • Hi,

    ich versuche mir gerade eine Klasse zu schreiben, die Funktionen die ich oft nutze enthält.
    Z.B. eine Funtion StrToFloat().
    Das Problem ist, die Funktion soll statisch sein.
    Allerdings braucht sie einen Stringstream.
    Jedes mal einen in der Funktion erstellen ist wohl blöd, daher will ich ihn lieber als private static haben, sodass ich mehrmals auf ihn zugreifen kann.
    Nur - wie initialisiere ich ihn dann?

    private:
    	static std::stringstream strStream;
    

    Klappt halt leider nicht. (Kompiler Error - "nicht aufgelöstes externes Symbol...")

    Wie würdet ihr das angehen?



  • In die .cpp-Datei der Implementierung muss zusätzlich noch:

    std::stringstream MeineKlasse::strStream;
    


  • Es klappt so - aber für was braucht es denn das?
    Also das man das zweimal deklarieren muss?
    Steckt da irgend ein tieferer Sinn dahinter? 😕



  • In der CPP Datei ist die Implementation. Der Header ist nur die Schnittstelle.
    bei dem Beispiel von Decimad wird einfach nur der Standardkonstruktor aufgerufen. Alterantiv, kannst du ja auch einen anderen Konstruktor aufrufen.



  • Naja, statischen Datenmembern ist ja kein Speicherplatz "innerhalb" von deren Objekten zugeordnet, aber irgendwo muss ihre eindeutige Instanz ja erstellt werden, auf die sich dann alle Übersetzungseinheiten beziehen können. Ist halt wie mit globalen Variablen.



  • Oki, vielen dank für die erläuterung.


Log in to reply