velover
(velover)
11 Październik 2013 07:45
#1
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.
etam
(etam)
11 Październik 2013 18:50
#2
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.
Plik, którego zawartość podałeś ma nazwę StaticVariables.cpp? Trochę mylące jest “#ifndef StaticVariables_cpp”. To powinien być nagłówek.
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;
Usuń zbędne “using namespace std;” z nagłówka.
velover
(velover)
12 Październik 2013 07:54
#3
Dzięki, poradziłem już sobie przenosząc
std::vector > StaticVariables::mapa; do pliku w którym pierwszy raz używam tej zmiennej.
etam
(etam)
12 Październik 2013 08:30
#4
Mam dziwne wrażenie, że chociaż to, co napisałeś się kompiluje, to możesz mieć niezły bałagan w kodzie.
Jaka jest nazwa pliku, którego zawartość podałeś na początku?
Ile masz plików .cpp w projekcie? Ile masz plików .h lub .hpp w projekcie?
Czy robisz gdziekolwiek "#include “plik.cpp”? (cały czas mój niepokój budzi “#ifndef StaticVariables_cpp”)
Dlaczego plik, w którym po raz pierwszy używasz obiektu StaticVariables::mapa jest właściwym do umieszczenia jego definicji? Dlaczego nie?