Nie widzi pola statycznego

0

Mam zadeklarowaną klasę:

class Dane
{
    public:
        static vector< vector<string> > _dane;
        static vector<string> _filmyUnikalne;
        static vector<string> _datyUnikalne;
        static void wyswietlWektor(); // do usuniecia pozniej
        static void zamienZnaki(const string &co, const string na_co, string &w_czym);
        static void sortujPoKolumnie(int kolumna); // kolumna 0-3
        static void wczytajDoWektora();
        static void wydobadzUnikalne();
        static void wczytajUnikalneZPlikow();
};

a dalej taką metodę.

void Dane::wyswietlWektor()
{
    for(int i=0; i<_dane.size(); i++)
    {
        for(int j=0; j<4; j++)
            cout << _dane[i][j] << "   "; // to wskazuje
        cout << endl;
    }
}

Problem w tym, że kompilator nie widzi pola _dane mimo, że jest częścią tej klasy

"undefined reference to Dane::_dane i wskazuje skomentowaną linijkę. Nie wiem dlaczego :(

Jak wyjmę definicję _dane do globalu to kod da się skompilować.

Przejrzałem kolejne błędy. On w ogóle nie widzi tego pola, bo kolejne wystapienia _dane w kodzie też oznacza tym błędem :(

1

Pola statyczne powinny byc inicjalizowane. Jezeli w pliku naglowkowym masz definicje klasy a w pliku cpp masz implementacje metod, to w pliku cpp napisz

 
vector< vector<string> > Dane::_dane;
0

Nie wiedziałem o tym... Dzięki wielkie, to faktycznie rozwiązało problem :)

0

Nie ma sprawy. Napisze moze jeszcze, ze powyzsza metoda sprawdzi sie w sytuacji kiedy statyczne pole posiada konstruktor domyslny. Jezeli nie posiada konstruktora domyslnego to trzeba uzyc innej metody inicjalizacji. Dla przykladu, jezeli byloby to pole typu int to inicjalizacja wygladalaby tak:

 
int Dane::_zmienna = 0;

Przy zalozeniu ze chcesz zainicjalizowac zmienna "zmienna" wartoscia zero.

0

Swoją drogą klasa, która ma wszystkie pola i metody statyczne to błąd projektowy. Albo zrób sobie singleton (lepiej nie - antywzorzec), albo normalną klasę, której referencja/wskaźnik będzie przesyłany do innych klas, które go potrzebują.

1 użytkowników online, w tym zalogowanych: 0, gości: 1