Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Inicijalizacija static polja klase

[es] :: C/C++ programiranje :: Inicijalizacija static polja klase

[ Pregleda: 1654 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

vtomic85
Vladimir Tomić
Beograd

Član broj: 33438
Poruke: 69
*.dynamic.isp.telekom.rs.



+2 Profil

icon Inicijalizacija static polja klase25.01.2012. u 09:41 - pre 148 meseci
Pozdrav,

Radim projekat za fakultet (Operativni sistemi 2 na ETF-u) i imam problem.

Imam klasu FS koja mi je unapred data i koju ne smem da menjam. Ova klasa ima neke metode za rad sa fajl sistemom. Sadrži i pokazivač
KernelFS* myImpl;
KernelFS je klasa koju ja treba da implementiram. Korisnik radi sa klasom FS i kada pozove neku metodu (npr. FS::mount(Partition* p)), ja samo treba da to prosledim (return myImpl->mount(p)).
Dakle, klasa KernelFS je ono "pravo" jezgro sistema i u njoj se obavljaju svi poslovi.
KernelFS sadrži sledeća polja:
Code:
static bool available[26]; // da li je slobodno slovo za particiju?
static Partition* parts[26]; // niz pokazivaca na montirane particije
static FileTable* ft; // tabela za evidenciju otvorenih fajlova
(sve je public)

Imam metodu char KernelFS::mount(Partition* partition) u kojoj pokušavam da uradim sledeće:
Code:
while (!available[i]) { // probao sam i while (!KernelFS::available[i])
   /* radi nesto */
   i++;
}

I program mi pukne kad dođe dovde. Uspeo sam da ukapiram da je problem (ili jedan od problema) u tome što nizovi available i parts nisu inicijalizovani. I klasa FS i klasa KernelFS imaju svoje konstruktore, ali problem je u tome što ih main nikada ne poziva, već samo pristupa static metodama (recimo Partition* p=...; FS::mount(p);).

Moje generalno pitanje glasi - kako da inicijalizujem neki static niz a da to ne bude u konstruktoru te klase? I konkretno, kako da rešim ovaj problem?

P.S.
Da, coding skills su mi na minimumu, poslednji put sam aktivno koristio C++ pre 6-7 godina. A na netu nikako ne uspevam da nađem ovo što mi treba.

Hvala unapred.
 
Odgovor na temu

Mihajlo Cvetanović
Beograd

Moderator
Član broj: 37636
Poruke: 1249



+96 Profil

icon Re: Inicijalizacija static polja klase25.01.2012. u 10:37 - pre 148 meseci
Static članice možeš da inicijalizuješ u posebnoj statičnoj funkciji koja se poziva na početku svake KernelFS funkcije:

Code:
void KernelFS::InitializeStatics()
{
  static bool isInitialized = false;
  if (!isInitialized)
  {
    isInitialized = true;

    // Ovde inicijalizuj svoje static membere
  }
}

char KernelFS::mount(Partition* partition)
{
  InitializeStatics();

  // Ostatak funkcije
}

void KernelFS::nekaDrugaFunkcija()
{
  InitializeStatics();

  // Ostatak funkcije
}
 
Odgovor na temu

vtomic85
Vladimir Tomić
Beograd

Član broj: 33438
Poruke: 69
*.dynamic.isp.telekom.rs.



+2 Profil

icon Re: Inicijalizacija static polja klase25.01.2012. u 10:49 - pre 148 meseci
Hvala na odgovoru.
Još jedno pitanje, čisto da znam ubuduće...
Ako se odlučim da inicijalizujem static promenljive van klase, npr:
Code:
File* FileTable::file[]={0};
char FileTable::mode[]={' '};

Kako da na taj način inicijalizujem 2D niz (konkretno, static char name[TSIZE][8], gde je TSIZE neka velika konstanta)? Polomih se sa zagradama, al' nikako da otkrijem pravi način.
 
Odgovor na temu

Mihajlo Cvetanović
Beograd

Moderator
Član broj: 37636
Poruke: 1249



+96 Profil

icon Re: Inicijalizacija static polja klase25.01.2012. u 11:14 - pre 148 meseci
U zaglavlju (.h):

Code:
const int TSIZE = 3;

struct Primer
{
    static char name[TSIZE][8];
};


U sors fajlu (.cpp):

Code:
char Primer::name[TSIZE][8] = {"jedan", "dva", "tri"};

 
Odgovor na temu

Mihajlo Cvetanović
Beograd

Moderator
Član broj: 37636
Poruke: 1249



+96 Profil

icon Re: Inicijalizacija static polja klase25.01.2012. u 11:17 - pre 148 meseci
Uzgred, ako je u pitanju ime fajla koje ima maksimalno 8 znakova onda treba da zauzeš 9 charova (jedan više za nul terminator).
 
Odgovor na temu

[es] :: C/C++ programiranje :: Inicijalizacija static polja klase

[ Pregleda: 1654 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.