metoda niestatyczna

0

Cześć :)
Założmy, że w klasie mamy metodę statyczną. Jednym z atrybutów tej klasy jest też obiekt statyczny. Jak teraz mogę zainicjalizować poszczególne pola w tym statycznym obiekcie?

class A{
static A a;
int b;
static void metoda();
};
static void A::metoda(){
A::a.b = 2; // błąd, undefinied reference
}
0

Naucz się formatować kod, bo za chwilę przestaniesz rozumieć co sam napisałeś.

class A
  {
   static A a;
   int b;
   static void metoda();
  };
A A::a; // brakuje tego

void A::metoda()
  {
   A::a.b = 2; // błąd, undefinied reference
   a.b = 2; // wystarczy to
  }
0

A A::a; // brakuje tego

ma to jakieś uzasadnienie, czy należy zapamiętać jako uprzykrzenie życia (?).

3
mielony napisał(a):

A A::a; // brakuje tego

ma to jakieś uzasadnienie, czy należy zapamiętać jako uprzykrzenie życia (?).

Moim zdaniem to jest po to by linker wiedział co zrobić. Definicja klasy może być include'owana z wielu plików .cpp, ale statyczne pola muszą być alokowane/ definiowane tylko raz. W takim razie to statyczne pole musi być zdefiniowane w jakimś jednym konkretnym pliku .cpp który będzie łączony z innymi na etapie łączenia.

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