Wpis z mikrobloga

Programisci wykopu potrzebuje rady :) niby proste ale nie potrafie tego ogarnac z gory zaznaczam ze zaczynam w programowaniu objektowym C++ wiec prosze o wyrozumialosc :) Pisze klase i chcialbym aby liczyla ile jest aktualnie objektow stworzonych oraz nadawala Id objektowi. Stworzylem zmienne static int counter oraz Id. Nie potrafie im nadac wartosci tzn chcialbym zeby counter globalnie byl 0 a w konstruktorze bede go zwiekszal a w destruktorze zmiejszal podobnie z Id jednak nie moge zainicjowac static int a wlasnie takiej zmiennej potrzebuje co mozecie mi doradzic jak to rozwiazac ?( ͡° ͜ʖ ͡°)
#naukaprogramowania #progamowanie #cpp #pomoc
  • 22
@frogi16
class przykad{
private:
static int counter=0;
static int Id=1;
int Myid;
public:
przyklad{
counter++;
Myid=Id;
Id++;}
}

|8|error: ISO C++ forbids in-class initialization of non-const static member 'przyklad::counter'|
|9|error: ISO C++ forbids in-class initialization of non-const static member 'przyklad::ID'|
Nie moge zainicjalizowac w takim miejscu a potrzebuje zmienna globalna dla liczenia objektow, jezeli dam const to moge zainicjalizowac ale juz nie pozwoli mi go zmieniac .
@Valut-tech: to inicjalizuj poza klasą czy jakąkolwiek funkcją. O ile pamiętam (mogę się mylić, uprzedzam) byłoby coś takiego:
static int przyklad::counter=0;
Najlepiej poszukaj w Google, to dość podstawowe zagadnienie i jest wiele tematów o tym. Kolega wyżej też chyba wrzucił pasujący link.
@Valut-tech: już niepamiętam ale w "Project build options" => "compiler settings" => "compiler flags" powinna być opcja do wybrania, jak nie to w "other options" wpisz -std=c++11 jak kompilator się będzie pluć to znaczy że masz za stary, uaktualnij.
@Valut-tech: Ustawisz, ponieważ przy każdym stworzeniu jakiegoś obiektu będzie miał on id równe aktualnej wartości licznika, po czym ją zwiększy o jeden, tak, że następny stworzony obiekt będzie miał id o 1 większe :)
@Valut-tech: To wtedy zamiast:
int przyklad::counter = 0;
Piszesz:
int przyklad::counter = 100;
I pierwszy stworzony w programie obiekt tej klasy będzie miał id 100, drugi będzie miał id 101, kolejny 102 itd.

Dobra, w sumie tak jak masz też może być. Masz wtedy dwa oddzielne liczniki i jeden może być do tworzenia unikalnego ID, a drugi do aktualnej liczby obiektów w programie. Zapewne też o to Ci chodziło :)