[C++]Auf privaten statischen Member zugreifen ?

  • C++

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von rykoJLL.

    [C++]Auf privaten statischen Member zugreifen ?

    Hallo, ich steh grad anscheinend ordentlich aufm Schlauch, denn ich bekomm es nicht gebacken auf nen statischen Member zuzugreifen. Handelt sich um folgenden Code(gekürzt wegen nem Wettbewerb).

    C-Quellcode

    1. //Container.h
    2. #ifndef CONTAINER_H
    3. #define CONTAINER_H
    4. #include <iostream>
    5. #include <stdexcept>
    6. #include <exception>
    7. namespace BwInf {
    8. template<typename T>
    9. class Container
    10. {
    11. public:
    12. ...
    13. static int getStep() {return step;}; //Zeile 22
    14. static void incrementStep() {step++;}; //Zeile 23
    15. private:
    16. ...
    17. static int step = 0;
    18. };
    19. template<typename T>
    20. void Container<T>::fill(Container<T> &container)
    21. {
    22. ...
    23. Container::incrementStep();
    24. }
    25. }
    26. #endif

    Der Linker wirft beim Kompilieren sowohl innerhalb als auch außerhalb des Headers folgende Fehler:

    Quellcode

    1. /tmp/cc4rDjGS.o: In Funktion `BwInf::Container<int>::getStep()':
    2. /home/rico/Programmieren/BwInf/Aufgabe1/Container.h:22: Nicht definierter Verweis auf `BwInf::Container<int>::step'
    3. /tmp/cc4rDjGS.o: In Funktion `BwInf::Container<int>::incrementStep()':
    4. /home/rico/Programmieren/BwInf/Aufgabe/Container.h:23: Nicht definierter Verweis auf `BwInf::Container<int>::step'
    5. /home/rico/Programmieren/BwInf/Aufgabe/Container.h:23: Nicht definierter Verweis auf `BwInf::Container<int>::step'
    6. collect2: error: ld returned 1 exit status


    Jemand ne Idee was da schief läuft ?
    Ich hätte gemeint, dass es so sein sollte (gerade kein Compiler da und schon länger her. dass ich C++ geschrieben habe):

    C-Quellcode

    1. static void incrementStep() {Container::step++;};

    Mit der getStep-Methode analog.
    Mit freundlichen Grüßen,
    Thunderbolt
    Hab ich auch schon probiert :

    C-Quellcode

    1. template<typename T> //Hier wird ein Klassen Template benutzt ,um verschiedene Zahlen Typen nutzen zu können
    2. class Container
    3. {
    4. private:
    5. static int step;
    6. public:
    7. ...
    8. static int getStep();
    9. static void incrementStep() {Container::step++;};
    10. private:
    11. ...
    12. };

    Befindet sich alles im selben Header. Die gleichen Fehler.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „rykoJLL“ ()