Unresolved external symbol - atrybut statyczny klasy

Unresolved external symbol - atrybut statyczny klasy
BE
  • Rejestracja:ponad 13 lat
  • Ostatnio:ponad 12 lat
  • Postów:54
0

Witam,

Podczas kompilacji pojawia mi się taki błąd:

error LNK2001: unresolved external symbol "private: static int Policy::countPolicies" (?countPolicies@Policy@@0HA)

Chodzi o to, że w klasie Policy mam statyczną zmienną countPolicies, która zawiera aktualną liczbę wszystkich polis. Posiadam ją dlatego, iż później id każdej polisy tworzę przypisując mu wartość o jeden większą od aktualnej wartości countPolicies. Na początku programu za pomocą statycznej metody setCountPolicies przypisuje zmiennej countPolicies wartość 0. I chyba tu gdzieś jest problem, sam do końca nie wiem.

Ważne fragmenty kodu:

Kopiuj
class Policy {

	private:
		static int countPolicies;
                // ciąg dalszy
        public:
		Policy() {

			this->id = countPolicies + 1;

		};
		void static setCountPolicies(int n) {
			countPolicies = n;
		};

};

Policy::setCountPolicies(0);

Nie do końca sam mogę zlokalizować ten błąd, bo kompilator na niego nie wskazuje, a mi brak po prostu jeszcze doświadczenia w C++.

AN
  • Rejestracja:około 14 lat
  • Ostatnio:prawie 13 lat
  • Postów:10
0

Pewnie chodzi o to że nie inicjalizujesz zmiennej statycznej. Dopisz:

Kopiuj
 int Policy::countPolicies = 0;

"Prawdziwa głupota zawsze pokona sztuczną inteligencję." Terry Pratchett
Shalom
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
0

Klasyczny błąd ;) Musisz gdzieś zdefiniować tą zmienną statyczną. Zapis jaki przedstawiłeś to tylko deklaracja (czyli nigdzie fizycznie tej zmiennej nie ma!). Musisz gdzieś napisać:

Kopiuj
int Policy::countPolicies;

"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
tubbs
chodzi o to, że zmienna ta jest widoczna tylko w klasie? po wyjściu z klasy już jej nie ma bo jest tworzona na stosie?
Shalom
Nie. Chodzi o to że w klasie napisałeś tylko "będzie taka zmienna" a nigdzie nie przydzielono jej pamięci.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.