[C++]Problem z inicjalizacją statycznego vectora

Witam, mam problem z inicjalizacją statycznego vectora. Kod klasy w której się znajduje wygląda następująco:

#ifndef StaticVariables_cpp

#define StaticVariables_cpp

#include 

using namespace std;

class StaticVariables

{

public:

    static const int FPS=60;

    static const bool debugInput=false;

    static std::vector > mapa;


};

#endif

W innej klasie podczas wywołania kodu:

vector< vector > vectorowaMapa;

...

StaticVariables::mapa=vectorowaMapa;

Występuje błąd: undefined reference to `StaticVariables::mapa’ Oczywiście plik ze StaticVariables zaincludowany. W internecie znalazłem, że dodanie

std::vector > StaticVariables::mapa;

pod klasą StaticVariables pomoże, ale jednak nie pomaga.

To jest błąd konsolidatora. Pola statyczne muszą mieć swoje miejsce definicji (nie tylko deklaracji) tak jak zmienne globalne. http://en.cppreference.com/w/cpp/language/static. Wyjątkiem są “static const” to typie liczbowym (np. int) lub enum.

  1. Plik, którego zawartość podałeś ma nazwę StaticVariables.cpp? Trochę mylące jest “#ifndef StaticVariables_cpp”. To powinien być nagłówek.

  2. Zakładając, że to jednak jest StaticVariables.hpp (lub .h jak wolisz), to w StaticVariables.cpp powinno być

    #include “StaticVariables.hpp”

    std::vector > StaticVariables::mapa;

  3. Usuń zbędne “using namespace std;” z nagłówka.

Dzięki, poradziłem już sobie przenosząc

std::vector > StaticVariables::mapa; do pliku w którym pierwszy raz używam tej zmiennej.

Mam dziwne wrażenie, że chociaż to, co napisałeś się kompiluje, to możesz mieć niezły bałagan w kodzie.

  1. Jaka jest nazwa pliku, którego zawartość podałeś na początku?

  2. Ile masz plików .cpp w projekcie? Ile masz plików .h lub .hpp w projekcie?

  3. Czy robisz gdziekolwiek "#include “plik.cpp”? (cały czas mój niepokój budzi “#ifndef StaticVariables_cpp”)

  4. Dlaczego plik, w którym po raz pierwszy używasz obiektu StaticVariables::mapa jest właściwym do umieszczenia jego definicji? Dlaczego nie?

  1. Draw.cpp

  2. 8xh i 9xcpp, StaticVariables jest jedynym, którego nie podzieliłem na cpp i h.

  3. Tak includuję ten ze StaticVariables;

  4. Bo działa w ten sposób :slight_smile: